2013-02-27 73 views
33

我的代码是:集PYTHONPATH

import scriptlib.abc 
import scriptlib.xyz 

def foo(): 
    ... some operations 

但脚本库是在一些其他的目录,所以我必须包括在环境变量“PYTHONPATH”该目录。

反正在我可以在环境变量“PYTHONPATH” import语句之前,先添加脚本库目录就像得到执行:

import sys 
sys.path.append('/mypath/scriptlib') 
import scriptlib.abc 
import scriptlib.xyz 

def foo(): 
    ... some operations 

如果是这样,只对命令提示符的价值或者是全球?

在此先感谢

+1

你尝试其他可能的方法是什么?该代码应该正常工作。 sys的新值。path'对你的程序来说是本地的('$ PYTHONPATH'变量只有在启动解释器来填充'sys.path'时才会被读取,它不会被写回到环境中)。 – filmor 2013-02-27 10:23:44

+0

是的,它工作 – DKG 2013-02-27 11:49:07

回答

34

这将添加到您的Python程序/实例的路径(即运行可执行文件)。该路径不会被其他Python进程修改。另一个正在运行的Python程序不会修改它的路径,并且如果退出程序并再次运行,那么路径将不包含之前添加的内容。你在做什么通常是正确的。

set.py:

import sys 
sys.path.append("/tmp/TEST") 

loop.py

import sys 
import time 
while True: 
    print sys.path 
    time.sleep(1) 

运行:python loop.py &

这将运行loop.py,连接到标准输出,并且将继续运行在背景中。然后您可以运行python set.py。每个都有一组不同的环境变量。请注意0​​的输出不会更改,因为set.py不会更改loop.py的环境。

了一份关于进口

Python导入是动态的,就像语言的其余部分。没有静态链接正在进行。导入是一个可执行的行,就像sys.path.append...一样。

+0

但我不想在我的代码中的路径。我希望我的代码干净和便携。没有“蟒蛇项目”的概念吗? (对于Visual-studio-code或Atom.io来说)? – pashute 2017-11-05 07:45:52

+0

是的,相当于Python的“项目”是VirtualEnv。 VirtualEnvWrapper是一个很好用的界面。这和Visual Studio的区别在于已经有了一个全局的Python环境,而virtualenv只是在上面创建了一个虚拟层。可能还有其他工具,我已经远离Python几年了。 – Joe 2017-11-06 15:28:22

5

也在文档here中注意到。
转到Python X.X/Lib和这些行添加到site.py那里,

import sys 
sys.path.append("yourpathstring") 

这会改变你的sys.path使每个负载,它将在它该值..

如前所述heresite.py

该模块在初始化期间自动导入。导入此模块会将特定于站点的路径附加到模块搜索路径并添加一些内置项。

用于添加到sys.path一些路见these docs

+0

,但这与手动设置环境变量中的值相同。我需要的是频繁地更改库的路径,就像从文件中获取scriptlib路径并在使用它之前进行设置一样。 – DKG 2013-02-27 10:42:59

+0

不,这个值会附加在python.exe的每次运行中,因为'site.py'在初始化过程中会自动加载。所以,你不需要'import sys sys.path.append ....'在每个文件中。 – pradyunsg 2013-02-27 10:46:25

+1

考虑一下我有两份相同的python脚本的情况。 一个脚本想从C:\ testers \ scriptlib获取库,并从D:\ developer \ scriptlib获取其他需要的库。在那种情况下,site.py如何确定分配哪个路径&谁。 – DKG 2013-02-27 11:20:33