关于python:Import语句适用于PyCharm但不适用于终端

Import statement works on PyCharm but not from terminal

pycharm 2016.2.3,Mac OS X 10.11.1,python 3.5(自制);

我有这个文件夹结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
project
  /somepackage
    /subpackage
     __init__.py  
     bar.py
   __init__.py
   foo.py

foo.py:
import somepackage.subpackage.bar
print("foo")

bar.py:
print("bar")

所以我的预期产出是

1
2
bar
foo

从Pycharm运行时,此功能正常。但是,当我从终端运行它时,会收到一个重要错误:

1
2
3
4
5
6
$ 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'

我发现了这个问题,也就是同样的问题。但是,所有建议的解决方案都不适用于我,因为我确实使用了与pycharm相同的python解释器,而且我目前在包含somepackage/文件夹的文件夹中。

有人对如何解决这个问题有其他的建议吗?谢谢你!


您像运行脚本一样运行foo.py,但实际上您像使用模块一样使用它。因此,正确的解决方案是将其作为模块运行:

1
python3 -m somepackage.foo

对于记录,另一种选择是编辑路径,如下所示:

1
export PYTHONPATH=.

(或者你可以把绝对目录放在那里,当然你也可以附加已经在你的pythonpath中的任何其他目录。)这更接近pycharm所做的,但在哲学上不太正确。