【发布时间】:2018-10-01 04:45:16
【问题描述】:
我有一个相当简单的 python 包。单独使用时,它似乎工作正常。它看起来像这样:
my_script/
__init__.py
my_script.py
my_script_helper.py
data/
my_data.csv
__init__.py 为空白。
my_script.py 看起来像这样:
from my_script_helper import *
def do_thing(x):
return helper(x)
my_script_helper.py 看起来像这样:
def helper(y):
return y + 1
我可以运行导入 my_script.py 的测试脚本并获得预期的输出。据我所知,单独使用 my_script 包可以正常工作。因此,我将所有内容都粘贴到 GitHub 上的存储库中,并将其作为子模块导入到另一个项目中。
另一个项目现在看起来像这样:
my_big_project/
my_script/
__init__.py
my_script.py
my_script_helper.py
data/
my_data.csv
my_big_project.py
但是,现在 my_script.py 中的 import 语句给了我一个未解决的引用错误。如果我进入 my_script.py 并将导入语句更改为以下内容:
from my_script.my_script_helper import *
然后就可以了。当然,该声明单独使用时会破坏包装。而且我认为我可能不应该在这样的子模块中闲逛。
我是一个 Python 和编程新手,在导入、命名空间和 __init__ 方面遇到了困难。如果有人能指出我应该如何在这里构建我的导入的正确方向,我将不胜感激。
编辑: 在把我的头撞到墙上之后,我发现有效的解决方案是将以下内容添加到 my_script.py:
import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'my_script'))
我觉得这可能不是正确的方法,但到目前为止它运行良好。这是针对 python 3.6.1 的,以防有人在这里绊倒。
【问题讨论】: