Desiring to improve my Python style, I ran a PEP-8 style checker on one of my script and it complained about something I don't know how to fix. The prologue of the script is something like:
#! /bin/env python3
import sys
import os
exe_name = os.path.basename(os.path.realpath(__file__))
bin_dir = os.path.dirname(os.path.realpath(__file__))
inst_dir = os.path.dirname(bin_dir)
sys.path.insert(0, inst_dir+'/path/to/packages')
import mypackage.mymodule
and the style checker complain on the import mymodule
line, stating that it should be a top of file. But I obviously can't move it before setting the path where it will be found. Is there a good way to achieve this (mandating an environment variable or a shell wrapper are not what I find better than my current code) while respecting PEP-8 recommendations at the same time?
If you want to avoid path manipulation, you may be able to do so by using the under-known .pth
feature.
sys.path
should begin with the directory containing the main program either by name or by reference as ''. I assume that the file importing mymodule
is not part of mypackage
, so that the '' entry is not useful for importing mymodule
.
sys.path
should end with the site-packages
directory for the executing binary. That is the normal place for added packages. If you do not want to move mypackage
into site-packages
, you can extend the latter 'vitually' by putting a mystuff.pth
file in it. It should contain one line: the path to the directory containing mypackage
. Call it myprojects
. Then mypackage
and any other package in myprojects
can be imported as if they were in site-packages
.
One advantage of .pth files is that you can put identical copies in multiple site-packages directories. For instance, I have multiple projects in F:/python
. I have multiple versions of Python installed. So I have put python.pth
containing that one line in the site-packages for each.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With