导入语句适用于 PyCharm 但不适用于终端
Import statement works on PyCharm but not from terminal
PyCharm 2016.2.3,Mac OS X 10.11.1,Python 3.5(自制软件);
我有这个文件夹结构
project
/somepackage
/subpackage
__init__.py
bar.py
__init__.py
foo.py
foo.py
:
import somepackage.subpackage.bar
print("foo")
bar.py
:
print("bar")
所以我的预期输出是
bar
foo
当 运行 来自 PyCharm 时,这工作正常。但是,当我从我的终端 运行 它时,我得到一个 ImportError:
$ pwd
$ /home/project (not the actual path; just omitting some personal stuff)
$ python3.5 somepackage/foo.py
File "foo.py", line 1, in <module>
import somepackage.subpackage.bar
ImportError: No module named 'somepackage'
我找到了this question,也是同样的问题。但是,none 的建议解决方案对我有用,因为我确实使用与 PyCharm 相同的 Python 解释器,而且我目前位于包含 /somepackage
的文件夹中文件夹。
有没有人对如何解决这个问题有任何其他建议?
你 运行宁 foo.py 像一个脚本,但你真的像一个模块一样使用它。所以正确的解决方案是 运行 它作为一个模块:
python3 -m somepackage.foo
郑重声明,另一种选择是像这样编辑您的路径:
export PYTHONPATH=.
(或者你可以把绝对目录放在那里,当然你应该附加任何其他已经在你的 PYTHONPATH 中的目录。)这更接近 PyCharm 所做的,但在哲学上不太正确.
我在 Linux 上通过两个步骤解决了我的问题:
- 第一步
转到项目的根目录并设置:
export PYTHONPATH=$PATHONPATH:`pwd`
- 第二步
运行
python3 -m somepackage.foo
记得没有'.py'后缀
如上所述,设置 PYTHONPATH 使其正常工作。我使用以下 VSCODE .env 内容,以便它适用于任何项目:
PYTHONPATH=${PROJ_DIR}:${PYTHONPATH}
当您在 run/debug 配置中选中“将内容根目录添加到 PYTHONPATH”时,这实际上就是 PyCharm 所做的。这是一个有用的设置,但它会宠坏你,因为你的代码在 PyCharm.
之外失败了
或者,如果您在终端中 运行,首先导出:
export PYTHONPATH=...
我花了好几天时间才搞定。
我在使用 scapy.layers.http 模块时遇到了同样的问题,
这个问题发生在我的 Kali (linux-Debian) 上,但 运行 在 Win-10 上很好(经过一些修改。)
数据包已正确安装 (scapy-http),程序在 PyCharm 中 运行ning 但不是脚本(来自终端)
我尝试通过在主根中重新安装来解决它,并弄乱 sys.path 但 None 已经奏效了。
疑难解答和解决方案
我发现它在寻找 http 模块:
/usr/local/lib/python3.7/dist-packages/scapy/layers/init.py
并得到 ImportError:
from scapy.layers import http --->
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'http' from 'scapy.layers' (/usr/local/lib/python3.7/dist-packages/scapy/layers/__init__.py)
然后我检查了scapy-http
真正安装的地方,也就是模块叫http.py
,所以我把它复制到:
/usr/local/lib/python3.7/dist-packages/scapy/layers/
found the http.py file in :/usr/local/lib/python3.7/dist-packages/scapy_http/
就是这样 :)!
我知道它有点 故障 但它有效!
PyCharm 2016.2.3,Mac OS X 10.11.1,Python 3.5(自制软件);
我有这个文件夹结构
project
/somepackage
/subpackage
__init__.py
bar.py
__init__.py
foo.py
foo.py
:
import somepackage.subpackage.bar
print("foo")
bar.py
:
print("bar")
所以我的预期输出是
bar
foo
当 运行 来自 PyCharm 时,这工作正常。但是,当我从我的终端 运行 它时,我得到一个 ImportError:
$ pwd
$ /home/project (not the actual path; just omitting some personal stuff)
$ python3.5 somepackage/foo.py
File "foo.py", line 1, in <module>
import somepackage.subpackage.bar
ImportError: No module named 'somepackage'
我找到了this question,也是同样的问题。但是,none 的建议解决方案对我有用,因为我确实使用与 PyCharm 相同的 Python 解释器,而且我目前位于包含 /somepackage
的文件夹中文件夹。
有没有人对如何解决这个问题有任何其他建议?
你 运行宁 foo.py 像一个脚本,但你真的像一个模块一样使用它。所以正确的解决方案是 运行 它作为一个模块:
python3 -m somepackage.foo
郑重声明,另一种选择是像这样编辑您的路径:
export PYTHONPATH=.
(或者你可以把绝对目录放在那里,当然你应该附加任何其他已经在你的 PYTHONPATH 中的目录。)这更接近 PyCharm 所做的,但在哲学上不太正确.
我在 Linux 上通过两个步骤解决了我的问题:
- 第一步 转到项目的根目录并设置:
export PYTHONPATH=$PATHONPATH:`pwd`
- 第二步
运行
python3 -m somepackage.foo
记得没有'.py'后缀
如上所述,设置 PYTHONPATH 使其正常工作。我使用以下 VSCODE .env 内容,以便它适用于任何项目:
PYTHONPATH=${PROJ_DIR}:${PYTHONPATH}
当您在 run/debug 配置中选中“将内容根目录添加到 PYTHONPATH”时,这实际上就是 PyCharm 所做的。这是一个有用的设置,但它会宠坏你,因为你的代码在 PyCharm.
之外失败了或者,如果您在终端中 运行,首先导出:
export PYTHONPATH=...
我花了好几天时间才搞定。
我在使用 scapy.layers.http 模块时遇到了同样的问题, 这个问题发生在我的 Kali (linux-Debian) 上,但 运行 在 Win-10 上很好(经过一些修改。)
数据包已正确安装 (scapy-http),程序在 PyCharm 中 运行ning 但不是脚本(来自终端)
我尝试通过在主根中重新安装来解决它,并弄乱 sys.path 但 None 已经奏效了。
疑难解答和解决方案
我发现它在寻找 http 模块:
/usr/local/lib/python3.7/dist-packages/scapy/layers/init.py
并得到 ImportError:
from scapy.layers import http --->
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'http' from 'scapy.layers' (/usr/local/lib/python3.7/dist-packages/scapy/layers/__init__.py)
然后我检查了
scapy-http
真正安装的地方,也就是模块叫http.py
,所以我把它复制到:/usr/local/lib/python3.7/dist-packages/scapy/layers/ found the http.py file in :/usr/local/lib/python3.7/dist-packages/scapy_http/
就是这样 :)!
我知道它有点 故障 但它有效!