我在与Python路径斗争中挣扎。我希望能够从目录导入文件。我可以从文件系统中获取它,但是当我依靠我的PATH(更新:或PYTHONPATH)来查找它时,我不能这样做。
以下是症状。首先,检查我的当前目录是否在我的路径上:
(.venv)~/Dropbox/gds/myapp $ pwd
/Users/me/Dropbox/gds/myapp
(.venv)~/Dropbox/gds/myapp $ echo $PATH
... :/usr/local/go/bin:.:/Users/me/Dropbox/gds/myapp
并检查test/test_app
是否在我认为的位置(目录中有__init__.py
:
(.venv)~/Dropbox/gds/myapp $ ls tests/
__init__.py __pycache__ test_app.py test_views.py
现在检查Python是否可以从此目录导入test/test_app
:
(.venv)~/Dropbox/gds/myapp $ python
Python 3.4.2 (default, Jan 29 2015, 13:46:46)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tests
>>> import tests.test_app
>>> exit()
到目前为止一切顺利。现在转到另一个目录,看看我是否可以导入test/test_app
:
(.venv)~/Dropbox/gds/myapp $ cd ..
(.venv)~/Dropbox/gds $ python
Python 3.4.2 (default, Jan 29 2015, 13:46:46)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tests
>>> import tests.test_app
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'tests.test_app'
但/Users/me/Dropbox/gds/myapp
在我的PATH上,我可以导入目录,为什么我不能导入这个文件?
更新:
感谢您的建议。刚尝试做export PYTHONPATH=$PYTHONPATH:/Users/me/Dropbox/gds/myapp
:但在运行Python时仍然会看到同样的问题。
答案 0 :(得分:1)
目录需要在PYTHONPATH
,而不是PATH
(用于常规的非Python命令查找)。
答案 1 :(得分:1)
tests
中可能还有另一个sys.path
Python包。检查tests.__file__
以确认。要解决此问题,请使用更具体的名称,例如myapp.tests
,即在tests
Python包中移动myapp
包。
答案 2 :(得分:0)
Python不使用PATH
。它使用PYTHONPATH
variable查找模块:
扩充模块文件的默认搜索路径。格式与shell的
PATH
相同:一个或多个目录路径名由os.pathsep
分隔(例如Unix上的冒号或Windows上的分号)。
PATH
是shell用来查找二进制文件的变量;只共享格式(如何指定和分隔路径)。