Pib*_*orn 24 python python-import importerror pycharm
Pycharm 2016.2.3,Mac OS X 10.11.1,Python 3.5(Homebrew);
我有这个文件夹结构
project
/somepackage
/subpackage
__init__.py
bar.py
__init__.py
foo.py
foo.py:
import somepackage.subpackage.bar
print("foo")
bar.py:
print("bar")
Run Code Online (Sandbox Code Playgroud)
所以我的预期输出是
bar
foo
Run Code Online (Sandbox Code Playgroud)
这从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'
Run Code Online (Sandbox Code Playgroud)
我发现了这个问题,这是同一个问题.但是,没有一个建议的解决方案适合我,因为我确实使用与PyCharm相同的Python解释器,我目前在包含该somepackage/文件夹的文件夹中.
有没有人对如何解决这个问题有任何其他建议?非常感谢你!
Art*_*cca 29
你像脚本一样运行foo.py,但你真的像模块一样使用它.所以正确的解决方案是将其作为模块运行:
python3 -m somepackage.foo
Run Code Online (Sandbox Code Playgroud)
对于记录,另一种选择是编辑您的路径,如:
export PYTHONPATH=.
Run Code Online (Sandbox Code Playgroud)
(或者你可以把绝对目录放在那里,当然你应该追加你PYTHONPATH中已经存在的任何其他目录.)这更接近PyCharm的作用,但在哲学上更不正确.
我在Linux上通过两个步骤解决了我的问题:
export PYTHONPATH=$PATHONPATH:`pwd`
Run Code Online (Sandbox Code Playgroud)
python3 -m somepackage.foo
记住不带“.py”后缀小智 5
如上所述,设置 PYTHONPATH 使其工作。我使用以下 VSCODE .env 内容,以便它适用于任何项目:
PYTHONPATH=${PROJ_DIR}:${PYTHONPATH}
Run Code Online (Sandbox Code Playgroud)
当您在运行/调试配置中选中“将内容根添加到 PYTHONPATH”时,这基本上就是 PyCharm 所做的。这是一个有用的设置,但它破坏了您,因为您的代码在 PyCharm 之外失败。
或者,如果您在终端中运行,请先导出:
export PYTHONPATH=...
Run Code Online (Sandbox Code Playgroud)
我花了几天的时间来解决所有这些问题。