我在 Python3 上有一个小应用程序,但由于找不到模块,它无法运行。我已经为所有文件夹添加了 __init__.py
但它不起作用。我想知道为什么。
这是我的结构
my_project
|- __init__.py
|
|-- folder
|-code.py
|- __init__.py
|
|-- Makefile
|-- scripts
|- import_data.py
这是我的 Makefile
test:
py.test tests/*.py
create_graph:
python scripts/import_data.py
这是我的 import_data.py
from folder.code import method
import csv
method()
# doing something here
当我运行 make create_graph
时,它给了我这个。
python scripts/import_data.py
Traceback (most recent call last):
File "scripts/import_data.py", line 1, in <module>
from folder.code import method
ImportError: No module named 'folder'
make: *** [create_graph] Error 1
最佳答案
当 import_data.py
脚本运行后,sys.path
有my_project/scripts
在其中,但不是my_project
,因此 python 无法找到 folder
封装在 sys.path
.
您应该尝试添加 my_project
文件夹进入 PYTHONPATH
变量,这将允许您访问 folder.code
来自任何地方。 BASH
的示例-
export PYTHONPATH=<path/to/my_project>:$PYTHONPATH
如果您无法进行此类环境变量更改,则在尝试导入 folder.code
之前以编程方式进行,您可以添加my_project
文件夹到sys.path
多变的。为此,您可以使用 __file__
获取脚本的文件名,然后使用 os.path.dirname()
从中获取目录名称然后使用 os.path.join
获取其父级和os.path.abspath
例如您的 import_data.py
可能看起来像 -
import sys
import os.path
parent = os.path.abspath(os.path.join(os.path.dirname(__file__),'..')) #this should give you absolute location of my_project folder.
sys.path.append(parent)
from folder.code import method
import csv
method()
关于python - Makefile 在 Python3 中找不到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31385154/