Makefile在Python3中找不到模块
问题描述:
我在Python3上有一个小应用程序,但它不会运行,因为找不到模块。我已经为所有文件夹添加了__init__.py
,但它不起作用。我想知道为什么。Makefile在Python3中找不到模块
这里是我的结构
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
,因此蟒蛇不能在sys.path
找到folder
包。
您应该尝试将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()