50

我试图在我没有对全局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. 我可以在那里放置一个模块,它会被导入,但是如果我把一个.pth文件放在那里,它就没有效果。这真的不应该工作,还是我做错了什么?

4

2 回答 2

64

文档中所述,仅当 PTH 文件位于 site-packages 目录中时才会处理它们。(更准确地说,如果它们位于“站点目录”中,则会对其进行处理,但“站点目录”本身是 Python 安装的全局设置,不依赖于当前目录或脚本所在的目录。)

如果包含您的脚本的目录是 on sys.path,您可以在该目录中创建一个sitecustomize.py。这将在 Python 启动时加载。在里面sitecustomize.py,你可以这样做:

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

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

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

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

# script.py
import makepath

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

于 2013-03-04T19:06:13.950 回答
-2

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

于 2019-01-05T19:14:04.353 回答