我有一个我写的Python库,它一直在我身上。我有一组变量可以改变库的工作方式。在测试中它一切正常,但是当我python lib.py install
时,变量对库没有影响。我把它分解为最简单的例子:
库:
##lib.py
config="Original"
def run():
print config
脚本:
import lib
lib.config="New"
lib.run()
print lib.config
如果将库放在与脚本相同的目录中并运行它,则输出为:
New
New
但是如果您安装库然后使用dist-packages中的库尝试脚本,则输出为:
Original
New
有人可以解释发生了什么吗?我对这些事情和理由感到有点困惑和非常感兴趣。另外我的编程配置是完全错误的吗?
修改
事实证明问题是 init .py文件。它基本上就像导入一个只导入另一个库的库。导入已安装的模块时,它会查看文件夹lib
和文件 init .py。 init .py只是一个班轮from lib import *
。它只是假装是实际的库,但如果你使用全局变量,这会导致奇怪的问题。本质上正在进行的模拟示例:
##init.py
from lib import *
脚本:
import init
init.config = 'New'
init.run()
print init.config
输出:
Original
New
函数run()在lib.py中查找config
,但print init.config
在init.py中查找它。感谢大家的帮助。修复方法是更改模块的安装方式(无 init .py)。最终,我希望删除所有全局变量,但目前一切都很完美。
答案 0 :(得分:2)
你所描述的内容与Python的工作原理不一致(如果你愿意,请阅读,“我不相信你的确如此,并且得到了正确的结果”)。
如果你从不同的地方或以不同的方式导入lib
,你可能最终得到它的两个副本,其中一个模块的两个副本或当前目录之一{{ 1}}和另一个已安装的lib
。如果您 获得此“原创”/“新”行为,那么这似乎是我最可能的原因。