将文件夹永久添加到Python的路径中

16

我写了一个Python库,我希望它可以放在文件系统的公共位置。

我只想在我的脚本中这样做:

>>> import mylib

现在我明白为了做到这一点,我可以这样做:

>>> import sys
>>> sys.path.append(r'C:\MyFolder\MySubFolder')
>>> import mylib

但我不想每次都这样做。

问题是:如何永久地将文件夹添加到Python的sys.path中?我想象它可能是一个环境变量,但我找不到它。

这似乎很简单,但我找不到如何做到这一点。

4个回答

17

PYTHONPATH 环境变量可以实现此功能。


完美。这正是我在寻找的。 - riwalk
它适用于Linux吗?我在我的.zshrc中添加了“PYTHONPATH=~/pythons/”(echo $PYTHONPATH也返回它)。然后我打印sys.path,但它并不存在。 :/ - xliiv
1
好的,它在Linux中可以工作。我没有在我的.zshrc文件中包含“export”命令。 这很奇怪,因为我正在更改$PATH,并且没有必要“导出”它。有任何想法吗? - xliiv
1
你可能需要将它设置为系统或用户环境变量。 在Windows 10中,您可以在开始菜单中键入“环境”,选择“环境变量”,然后点击同名按钮。您可能需要创建该变量。 - AChervony

6

5
另一种可能性是在Python启动时加载的脚本sitecustomize.py中修改sys.path。它可以放置在现有路径的任何位置,并且可以执行任何设置任务。例如,我使用它来设置使用readline进行tab键补全。 site模块提供了一种方法,可以处理添加到sys.path中的重复项和.pth文件。
import site
site.addsitedir(r'C:\MyFolder\MySubFolder')

如果将文件添加到当前路径是一个选项,我为什么要费心去改变路径呢?更糟糕的是,有什么理由让我想要在每个写的Python脚本中都添加那行代码呢?真抱歉啊伙计……并不太优雅。 - riwalk
@Stargazer712:嗯…… sitecustomize.py 会被 Python 自动运行。你不需要在每个 Python 脚本中添加一行代码。这就是整个重点所在。 - bobince
也许这是一个未明确说明的要求,即该库应使用典型安装程序进行安装,并且修改环境变量比编辑文件更容易(并且更类似于事务)。 - riwalk
如果是这种情况的话:在Python安装的site-packages文件夹中放置一个.pth文件,其中包含指向外部文件夹的路径。这比调整PYTHONPATH或sitecustomize更可靠。(如果根本不需要外部目录...对于“典型”的库,通常distutils/setuptools会负责将其放置在适当的位置。) - bobince
@bobince,您能粘贴site.py文件吗?我对完成和其他内容很感兴趣。 - xliiv

1
我不知道这是否普遍,但我有一个“usercustomize”文件,当启动我的shell时会被读取。也许只是因为我是一个新手,“环境变量”听起来很可怕...无论如何,这就是我永久修改sys.path的方法。
但正如所说,我不知道它有多普遍。我有python 2.7.3,在windows 7上安装了python(x,y)。而这个文件位于:
C:>用户>我>Appdata>Roaming>Python>Python27>sitepackages>(注意,Appdata是隐藏文件夹)
而且,正如所说的那样,文件名是“usercustomize.py”,文件中没有什么特别的内容。在我的情况下,只有我导入的3个路径。
import sys
sys.path.append('C:\\Users\\blablabla\\LPlot')
sys.path.append('C:\\Users\\bliblibli\\MTSim')
sys.path.append('C:\\Users\\blobloblo\\XP')

希望这也有所帮助……如果没有,不要打我,我是100%的新手。或者说99.99%。


嗯,实际上当我启动控制台时,并不只是简单地“读取”,因为在我启动它时 sys 实际上还没有被导入... 无论如何,我的三个文件夹永久地存在于我的 sys.path 中... 所以不知怎么的它能正常工作... - Julien Gorenflot
欢迎来到StackOverflow!您的帮助意愿值得赞扬,但是当您不确定答案是否正确时,不应该发布回答。如果您必须以“我不知道它有多普遍”开头回答,那么这表明您还不够有经验来回答这个问题。此外,这个问题已经在近三年前被提出(并回答);再添加一个答案不太可能帮助原始提问者,他们现在早已转向其他主题。 :-) - rmunn
抱歉...但实际上我已经寻找了一个类似于我所提出的答案一整天;因为我知道这个文件必须存在于某个地方,直到我再次找到它(我以前使用过它,但无法再找到它)。所以我想也许对其他人有用。而且当这个话题如此相似时,我不想开一个新话题... - Julien Gorenflot
为了能够导入usercustomize.py,必须将site.ENABLE_USER_SITE设置为“True”。请参见“Readline Configuration”部分上面的两段文字:https://docs.python.org/3/library/site.html#module-site。 - Rimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接