python - Makefile 在 Python3 中找不到模块

标签 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

最佳答案

import_data.py脚本运行后,sys.pathmy_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/

相关文章:

python - 解决pd.to_timedelta计算失败问题

javascript - 动态创建输入,然后使用 Flask 从输入中获取数据

python - 使用 python 中的命令从同一目录执行 cmd

linux - cpanm perl 模块安装在 'make' 和 'make test' 上失败

linker - 没有包查找器的CMake链接到外部库

STL - Android NDK构建脚本忽略主makefile

python - 递归上传目录(其中包含目录)到 FTP

python - 我如何绕过 "No module named ' Crypto' "error after doing "pip install pycrypto"?

python - 从另一个类方法调用类方法或常规方法之间的区别

python-3.x - Python - 结构包错误