我有一个相当简单的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并将import语句更改为以下内容:
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的,以防万一有人跌入这里。
答案 0 :(得分:0)
因为该软件包最初是独立的,所以对您来说很好用。现在,您已经在另一个项目中使用了该软件包,则应该使用绝对路径,这就是您遇到问题的原因。