库的行为方式不同,具体取决于它们是否已安装

时间:2011-09-01 23:14:50

标签: python

我有一个我写的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)。最终,我希望删除所有全局变量,但目前一切都很完美。

1 个答案:

答案 0 :(得分:2)

你所描述的内容与Python的工作原理不一致(如果你愿意,请阅读,“我不相信你的确如此,并且得到了正确的结果”)。

如果你从不同的地方或以不同的方式导入lib,你可能最终得到它的两个副本,其中一个模块的两个副本或当前目录之一{{ 1}}和另一个已安装的lib。如果您 获得此“原创”/“新”行为,那么这似乎是我最可能的原因。