【问题标题】:Makefile cannot find module in Python3Makefile 在 Python3 中找不到模块
【发布时间】:2015-07-13 13:47:41
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x makefile


    【解决方案1】:

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

    您应该尝试将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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 2020-11-14
      • 2021-05-04
      相关资源
      最近更新 更多