Posted By: Anonymous
I have just joined a project with a rather large existing code base. We develop in linux and do not use and IDE. We run through the command line. I’m trying to figure out how to get python to search for the right path when I run project modules. For instance, when I run something like:
ImportError: no module named core.'somemodule'
I get this for all of my imports to I assume it’s an issue with the path.
How do I get Python to search
~/codez/project/ and all the files and folders for *.py files during import statements.
There are a few possible ways to do this:
- Set the environment variable
PYTHONPATHto a colon-separated list of directories to search for imported modules.
- In your program, use
sys.path.append('/path/to/search')to add the names of directories you want Python to search for imported modules.
sys.pathis just the list of directories Python searches every time it gets asked to import a module, and you can alter it as needed (although I wouldn’t recommend removing any of the standard directories!). Any directories you put in the environment variable
PYTHONPATHwill be inserted into
sys.pathwhen Python starts up.
site.addsitedirto add a directory to
sys.path. The difference between this and just plain appending is that when you use
addsitedir, it also looks for
.pthfiles within that directory and uses them to possibly add additional directories to
sys.pathbased on the contents of the files. See the documentation for more detail.
Which one of these you want to use depends on your situation. Remember that when you distribute your project to other users, they typically install it in such a manner that the Python code files will be automatically detected by Python’s importer (i.e. packages are usually installed in the
site-packages directory), so if you mess with
sys.path in your code, that may be unnecessary and might even have adverse effects when that code runs on another computer. For development, I would venture a guess that setting
PYTHONPATH is usually the best way to go.
However, when you’re using something that just runs on your own computer (or when you have nonstandard setups, e.g. sometimes in web app frameworks), it’s not entirely uncommon to do something like
import sys from os.path import dirname sys.path.append(dirname(__file__))