Makefile在Python3中找不到模块

时间:2015-07-13 13:47:41

标签: python python-3.x makefile

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

1 个答案:

答案 0 :(得分:2)

运行import_data.py脚本时,sys.path中包含my_project/scripts,但my_project没有,因此python无法找到folder包在sys.path

您应该尝试将my_project文件夹添加到PYTHONPATH变量中,这样您就可以从任何地方访问folder.codeBASH -

的示例
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()