2015-07-13 109 views
0

我在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 

回答

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.joinos.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()