gpt4 book ai didi

python - 库的行为有所不同,具体取决于是否安装

转载 作者:行者123 更新时间:2023-12-01 06:07:47 26 4
gpt4 key购买 nike

我有一个我写的Python库,它一直在影响我。我有一组变量可以改变库的工作方式。在测试中一切正常,但是当我安装 python lib.py 时,变量对库没有影响。我将其分解为最简单的示例:

图书馆:

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

最佳答案

您所描述的内容与 Python 的工作方式不一致(如果您愿意,请阅读“我不相信您完全做到了这一点并得到了准确的结果”)。

如果您从不同的地方或以不同的方式导入lib,那么您最终可能会得到它的两个副本,要么是其中一个模块的两个副本,要么是当前模块之一的两个副本。目录 lib 和其他已安装的 lib 目录。如果您遇到这种“原始”/"new"行为,在我看来这是最可能的原因。

关于python - 库的行为有所不同,具体取决于是否安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7277673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com