我在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
答案 0 :(得分:2)
运行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()