使用.pth文件

时间:2013-03-04 18:37:08

标签: python

我正在尝试在我没有对全局site-packages目录具有写访问权限且不更改环境(PYTHONPATH)的系统上发现模块。我试图将.pth文件放在与我正在执行的脚本相同的目录中,但它似乎被忽略了。例如,我创建了一个文件extras.pth,其中包含以下内容:

N:\PythonExtras\lib\site-packages

但是,在同一目录中放置并运行的以下脚本会打印False

import sys
print r"N:\PythonExtras\lib\site-packages" in sys.paths

我有写访问权限的sys.path中唯一的目录是包含脚本的目录。是否有另一个(目前不存在的)目录,我可以放置extras.pth并让它被看到?有没有更好的方法来解决这个问题?

我在Windows上使用python 2.7。我在这里可以找到的所有.pth个问题都使用系统模块目录。

编辑:我在%APPDATA%\Python\Python27\site-packages跟踪了Windows每用户安装目录。我可以在那里放置一个模块,它将被导入,但如果我在那里放一个.pth文件,它就没有效果了。这真的不应该起作用,还是我做错了什么?

2 个答案:

答案 0 :(得分:46)

the documentation中所述,只有在PTH文件位于site-packages目录中时才会处理它们。 (更准确地说,如果它们位于“站点目录”中,它们将被处理,但“站点目录”本身是Python安装的全局设置,并且不依赖于当前目录或脚本所在的目录。)

如果包含脚本的目录位于sys.path,则可以在该目录中创建sitecustomize.py。这将在Python启动时加载。在sitecustomize.py内,你可以这样做:

import site
site.addsitedir('/some/dir/you/want/on/the/path')

这不仅会添加该目录,还会将其添加为“站点目录”,从而导致其中的PTH文件被处理。如果您想创建自己的个人site-packages - like-directory,这很方便。

如果您只需要在路径中添加一个或两个目录,则可以更简单地执行此操作。只需创建一个操作sys.path的小型Python库,然后从脚本中导入该库。类似的东西:

# makepath.py
import sys
sys.path.append('/whatever/dir/you/want')

# script.py
import makepath

编辑:同样,根据the documentation%APPDATA%\Python\PythonXY\site-packages(在Windows上)可能存在特定于站点的目录。你可以尝试一下,如果实际上你有写入权限(而不仅仅是你的脚本目录)。

答案 1 :(得分:0)

您可以在sys.path中已经存在的目录中创建一个.pth(路径)文件,以便可以将其包含在内/