Best practices regarding PYTHONPATH
Cameron Simpson
cs at cskk.id.au
Tue Mar 9 16:52:59 EST 2021
On 09Mar2021 05:00, Larry Martell <larry.martell at gmail.com> wrote:
>Which is considered better? Having a long import path or setting PYTHONPATH?
>
>For example, in a project where 50% of the imports come from the same top
>level directory is it better to add that dir to the path or reference it in
>the import statements?
All the below is personal opinion.
I'd be leaving the $PYTHONPATH alone - I tweak it to access the required
libraries, but not to change their dotted module paths.
For example, I include ~/lib/python in my personal environment to access
my personal modules, but I don't include
~/lib/python/cs/app/someapp/subpackage in order to shorten
"cs.app.someapp.subpackage.foo" to just "foo".
This is largely to avoid accidental shadowing of other modules. For
example, supposing "foo" above were the subpath "os.path". Yes,
contrived, but that's the flavour of problem I'm avoiding.
I think I'd be ok with it provided I didn't go too far down. Eg, if all
my "someapp"s were distinctively named I could be persuaded to use
~/lib/python/cs/app in the $PYTHONPATH, allowing
"someapp.subpackage.foo". But I'd still be reluctant.
If the project modules are tightly bound relative imports can get you a
fair way. Certainly within a package I do a lot of:
from .fixtures import these_things
to grab from the adjacent "fixtures.py" file instead of:
from project.submodule.fixtures import these_things
And I'm usually happy to go up an additional level:
from ..package2.fixtures import those_things
Somewhere around 3 dots I start to worry about presuming too much, but
that is an arbitrary decision based on the discipline (or lack of it) in
the project naming.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list