Reputation: 6037
I keep seeing sites mentioning that the directory that you execute 'python ' get added to the python path. For example on http://www.stereoplex.com/blog/understanding-imports-and-pythonpath, the author cd's to the /tmp folder then does 'print(sys.path)' and lo and behold, the /tmp folder appears in the path list. Here is me trying this out on my system (with 2.6.6 installed):
example structure:
app/
mymodule.py
inner_folder/
myscript.py
in myscript.py contains the line:
import mymodule.py
what I did:
cd app
python inner_folder/myscript.py # ImportError
Since I am executing the interpreter from the app/ directory, shouldn't 'app' be added to the python path? This is how a lot of the docs I have been reading have specified the behaviour should be.
Please enlighten!
(I have temporarily solved this by manually adding the folder I want into the environment but don't want to rely on that forever. Since many sites say this can be done, I'd like to reproduce it for myself)
Upvotes: 53
Views: 27699
Reputation: 626
In my experience, the cleanest solution is to add a setup.py
like this structure:
app/
__init__.py
mymodule.py
inner_folder/
myscript.py
setup.py
And the content of setup.py
looks like this:
from setuptools import setup
setup(
name='my-app',
version='0.1',
packages=['app'],
install_requires=[
# a list of required packages if needed
],
)
After installing via python setup.py develop
, in myscript.py
, you can import mymodule like this:
import app.mymodule
Or if you want to do import mymodule
, you can move setup.py
inside app/
, same directory as mymodule.py
, and change packages=['app']
to packages=[],
.
Upvotes: 0
Reputation: 2322
Check that the module directory is not empty. That may sound stupid, but in my case I hadn't realised that it was a git submodule and hadn't cloned recursively.
Upvotes: 0
Reputation: 798456
It is the script's directory that is added, not the current directory. If you turn inner_folder/
into a package then you can use python -m inner_folder.myscript
in order to run the script while having app/
added to sys.path
.
Upvotes: 84
Reputation: 45239
Whether or not the current directory is in sys.path
, import statements usually look like:
import mymodule
The code you wrote looks like:
import 'mymodule.py'
Upvotes: 4