2013-03-04 85 views
22

我想在系统上发现一个模块,我没有对全局site-packages目录的写访问权限,也没有更改环境(PYTHONPATH)。我试图将.pth文件放在与正在执行的脚本相同的目录中,但似乎被忽略。例如,我创建了一个文件extras.pth,内容如下:使用.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问题都使用系统模块目录。

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

回答

37

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

如果包含脚本的目录位于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 

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

+0

问题是这是为了教授课程,我试图让它尽可能地接近透明。人们总是开始一个新的python并陷入困境。 'Documents and Settings'下没有一些文件夹可以算作“网站目录”吗? IIRC的各种安装程序将把东西放在那里 - 但不知道在哪里,或者是否检查了.pth文件。 – alexis 2013-03-04 19:18:31

+0

是的,有,并且在http://docs.python.org/2/library/site.html#site.USER_SITE中记录了其他所有内容。我以为你说过你只能访问脚本目录,但现在我看到我误读了。 – BrenBarn 2013-03-04 19:28:04

+0

是的,谢谢,我正在搞清楚那个网站。html'是看的地方。然而,在那里放置一个'.pth'似乎没有工作... – alexis 2013-03-04 19:43:06