我正在尝试在我没有对全局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
文件,它就没有效果了。这真的不应该起作用,还是我做错了什么?
答案 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(路径)文件,以便可以将其包含在内/