我的文件目录树如下所示:
my_repo
├── experiments
│ ├── foo.py
│ └── __init__.py
└── tests
├── baz.py
└── __init__.py
在baz.py
内,我试试
from experiments.foo import FooExperiment
但我得到
*** ImportError: No module named experiments.foo
当我从终端(Mac OSX 10.9)打开python并运行
时from experiments.foo import FooExperiment
正确导入该类。到底是怎么回事?请帮忙。
在这两种情况下,sys.path
都完全相同,除非我在baz.py
中包含当前路径(到baz.py
)。是的/path/to/my_repo
也在我的sys.path
中。
编辑:我的问题是有冲突的鸡蛋文件,所以重新安装就行了(下面)。接受@Austin Marshall的答案,因为它可以解决这个问题的一般情况。
pip uninstall my_repo
python setup.py develop --user
答案 0 :(得分:2)
experiments
不在PYTHONPATH
中,也不是已安装使用标准的setuptools技术。我能够复制您的问题,这可以通过将my_repo
放入PYTHONPATH
来解决:
Austins-MacBook-Pro-2:my_repo amarshall$ tree .
.
├── experiments
│ ├── __init__.py
│ └── foo.py
└── tests
├── __init__.py
└── baz.py
2 directories, 4 files
Austins-MacBook-Pro-2:my_repo amarshall$ PATH=$PATH:`pwd`/experiments python tests/baz.py
Traceback (most recent call last):
File "tests/baz.py", line 1, in <module>
from experiments.foo import FooExperiment
ImportError: No module named experiments.foo
Austins-MacBook-Pro-2:my_repo amarshall$ PYTHONPATH=$PYTHONPATH:`pwd` python tests/baz.py
指定PYTHONPATH
时最后一行没有输出或错误,而不是PATH
答案 1 :(得分:-2)
我通常使用以下命令将路径附加到sys.path:
sys.path.append(os.path.join(os.path.dirname(__file__), "../myfolder"))
用
Import sys, os