ImportError: No module named when module is there
ImportError: No module named when module is there
我通常运行 python2 但我正在玩 python3。现在我很困惑为什么会收到此错误。
当我在 tests
目录中运行命令 ./test_web_events.py
时,我得到:
Traceback (most recent call last):
File "./test_web_events.py", line 21, in <module>
import qe.util.scratchstore as scratchstore
ImportError: No module named 'qe'
但是我的项目结构中有 qe
个目录:
/python_lib
Makefile
/qe
__init__.py
/tests
__init__.py
test_web_events.py
/util
__init__.py
scratchstore.py
/trinity
__init__.py
我尝试将我的 /tests
目录移动到 /python_lib
,但我仍然遇到同样的错误:
MTVL1289dd026:python_lib bli1$ ls
Makefile qe rundata setup.sh tests
MTVL1289dd026:python_lib bli1$ python3 tests/test_web_events.py
Traceback (most recent call last):
File "tests/test_web_events.py", line 21, in <module>
import qe.util.scratchstore as scratchstore
ImportError: No module named 'qe'
这是我的 sys.path
python2
>>> import sys
>>> print sys.path
['', '/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages']
sys.path
对于 python3
>>> print(sys.path)
['', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages']
这很可能是因为您还没有将 /python_lib/qe
添加到您的 PYTHONPATH
。
当你试图导入一个模块时,解释器只会在一定数量的地方寻找它,你不能随意尝试从任何地方导入一个模块。
最常见的方法是通过 pip
安装包,让模块与 .py
文件位于同一目录,或者将该模块的路径添加到PYTHONPATH
.
参见:https://docs.python.org/2/tutorial/modules.html#the-module-search-path
看来后一种情况很可能是您想要做的。这将取决于您的 OS,但谷歌搜索应该很简单。
确保你的所有包文件夹中都有 __init__.py
文件,这样你的结构看起来像
/python_lib
Makefile
/qe
/tests
test_web_events.py
/util
__init__.py <------------ create this file
scratchstore.py
/trinity
__init__.py
然后 cd
到 python_lib
文件夹和 运行 ``export PYTHONPATH=`pwd```
只需 #!/usr/bin/env python
将此添加到您的所有脚本中。确保它在 top.Like;
#!/usr/bin/env python
import qe
我假设你添加了Python 3 到路径,如果你这样做了,唯一的问题就是这个。你 不需要 需要 init.py
或 sys.path 或任何东西。如果你 added Python 3 到路径,这条线已经自动找到 Python 路径,如果 Python 2 还在路径上那么你得到错误是正常的.
问题是 /python_lib
不在 Python 路径中。 Python 2 和 3 的行为相同。
一般来说,do not run scripts from within (inside) a Python package、运行他们从顶级目录代替:
/python_lib$ python -m qe.tests.test_web_events
因此 /python_lib
在 Python 路径中而 /python_lib/qe/tests
不在。它假定有 tests/__init__.py
个文件。
不要手动修改 sys.path
。它可能会导致与导入模块相关的细微错误。有更好的选择,例如,如果您不想 运行 来自 /python_lib
的脚本,只需安装开发版本:
(your_virtualenv)/python_lib$ pip install -e .
我通常运行 python2 但我正在玩 python3。现在我很困惑为什么会收到此错误。
当我在 tests
目录中运行命令 ./test_web_events.py
时,我得到:
Traceback (most recent call last):
File "./test_web_events.py", line 21, in <module>
import qe.util.scratchstore as scratchstore
ImportError: No module named 'qe'
但是我的项目结构中有 qe
个目录:
/python_lib
Makefile
/qe
__init__.py
/tests
__init__.py
test_web_events.py
/util
__init__.py
scratchstore.py
/trinity
__init__.py
我尝试将我的 /tests
目录移动到 /python_lib
,但我仍然遇到同样的错误:
MTVL1289dd026:python_lib bli1$ ls
Makefile qe rundata setup.sh tests
MTVL1289dd026:python_lib bli1$ python3 tests/test_web_events.py
Traceback (most recent call last):
File "tests/test_web_events.py", line 21, in <module>
import qe.util.scratchstore as scratchstore
ImportError: No module named 'qe'
这是我的 sys.path
python2
>>> import sys
>>> print sys.path
['', '/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages']
sys.path
对于 python3
>>> print(sys.path)
['', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages']
这很可能是因为您还没有将 /python_lib/qe
添加到您的 PYTHONPATH
。
当你试图导入一个模块时,解释器只会在一定数量的地方寻找它,你不能随意尝试从任何地方导入一个模块。
最常见的方法是通过 pip
安装包,让模块与 .py
文件位于同一目录,或者将该模块的路径添加到PYTHONPATH
.
参见:https://docs.python.org/2/tutorial/modules.html#the-module-search-path
看来后一种情况很可能是您想要做的。这将取决于您的 OS,但谷歌搜索应该很简单。
确保你的所有包文件夹中都有 __init__.py
文件,这样你的结构看起来像
/python_lib
Makefile
/qe
/tests
test_web_events.py
/util
__init__.py <------------ create this file
scratchstore.py
/trinity
__init__.py
然后 cd
到 python_lib
文件夹和 运行 ``export PYTHONPATH=`pwd```
只需 #!/usr/bin/env python
将此添加到您的所有脚本中。确保它在 top.Like;
#!/usr/bin/env python
import qe
我假设你添加了Python 3 到路径,如果你这样做了,唯一的问题就是这个。你 不需要 需要 init.py
或 sys.path 或任何东西。如果你 added Python 3 到路径,这条线已经自动找到 Python 路径,如果 Python 2 还在路径上那么你得到错误是正常的.
问题是 /python_lib
不在 Python 路径中。 Python 2 和 3 的行为相同。
一般来说,do not run scripts from within (inside) a Python package、运行他们从顶级目录代替:
/python_lib$ python -m qe.tests.test_web_events
因此 /python_lib
在 Python 路径中而 /python_lib/qe/tests
不在。它假定有 tests/__init__.py
个文件。
不要手动修改 sys.path
。它可能会导致与导入模块相关的细微错误。有更好的选择,例如,如果您不想 运行 来自 /python_lib
的脚本,只需安装开发版本:
(your_virtualenv)/python_lib$ pip install -e .