2016-10-28 61 views
6

Pycharm 2016.2.3,Mac OS X 10.11.1,Python 3.5(Homebrew);导入语句适用于PyCharm,但不适用于终端

我有这样的文件夹结构

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,大约是同样的问题。然而,没有一个建议的解决方案适用于我,因为我确实使用了与PyCharm相同的Python解释器,我目前位于包含somepackage/文件夹的文件夹中。

有没有人有任何其他建议如何解决这个问题?非常感谢你!

+1

你somepackage有一个'__init __。py'文件吗?这表明python是包 – Mitta

+0

是的。我会编辑我的问题,谢谢! – Pibborn

回答

8

你正在运行foo.py就像一个脚本,但你真的像模块一样使用它。所以,正确的解决办法是运行它作为一个模块:

python3 -m somepackage.foo 

对于记录,另一种选择是编辑喜欢你的路径:

export PYTHONPATH=. 

(或者你可以把绝对的目录在那里,当然你应该追加任何已经在你的PYTHONPATH中的其他目录。)这更接近PyCharm所做的,但是在哲学上不太正确。

+0

你的两条建议都可行。谢谢! – Pibborn

+0

方法#1为我工作。这在哪里记录? – alex

+1

@alex它位于[命令行和环境文档](https://docs.python.org/3/using/cmdline.html)中,但除非您已经知道解决方案,否则不太明显。遗憾的是在本教程的[Modules]部分没有提及(https://docs.python.org/3/tutorial/modules.html),甚至是高度技术性的[Import System reference docs](https:/ /docs.python.org/3/reference/import.html)。 –

相关问题