开发者

Libraries act differently depending on if they are installed or not

开发者 https://www.devze.com 2023-04-01 05:02 出处:网络
I have a Python library I wrote which has been acting up on me. I have a set of variables which change the way the library works. In testing it all worked fine, but when I python lib.py install the va

I have a Python library I wrote which has been acting up on me. I have a set of variables which change the way the library works. In testing it all worked fine, but when I python lib.py install the variables have no effect on the library. I broke this down to the simplest example possible:

Library:

    ##lib.py
    co开发者_开发知识库nfig="Original"

    def run():
        print config

Script:

    import lib

    lib.config="New"
    lib.run()
    print lib.config

If you place the library in the same directory as the script and run it the output is:

    New
    New

But if you install the library and then try the script using the library from the dist-packages the output is:

    Original
    New

Could someone explain what is going on? I'm a bit confused and terribly interested in the happenings and reason. Additionally am I doing programatical configuration totally wrong?

Edit

It turns out the problem is the init.py file. It's basically like importing a library that just imports another library. When you import an installed module it looks at the folder lib and the file init.py. init.py is just a one liner from lib import *. It simply pretends to be the actual library, but that causes an odd problem if you use a global variable. A simulated example of what is essentially going on:

##init.py
from lib import *

Script:

import init

init.config = 'New'
init.run()
print init.config

Output:

Original
New

The function run() looks for config in lib.py, but print init.config looks for it in init.py. Thanks for the help everyone. Fix is to change the way the module installs (no init.py). Eventually, I hope to remove all the global variables, but for the time being everything works perfect.


What you describe would be inconsistent with how Python works (read, if you like, "I don't believe you did precisely that and got precisely that result").

If you go importing lib from different places or in different ways, though, you could be ending up with two copies of it, either two copies of one of the modules or one of the current-directory lib and the other the installed lib. If you are getting this "Original"/"New" behaviour, that seems to me the most likely reason.

0

精彩评论

暂无评论...
验证码 换一张
取 消