Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用.pth文件_Python - Fatal编程技术网

Python 使用.pth文件

Python 使用.pth文件,python,Python,我正在尝试在没有全局站点包目录的写访问权限的系统上发现模块,并且不更改环境(PYTHONPATH)。我试图将.pth文件与正在执行的脚本放在同一目录中,但它似乎被忽略了。例如,我创建了一个包含以下内容的文件extras.pth: N:\PythonExtras\lib\site-packages 但是下面的脚本放在同一个目录中并运行,将打印False import sys print r"N:\PythonExtras\lib\site-packages" in sys.paths sys.

我正在尝试在没有全局
站点包
目录的写访问权限的系统上发现模块,并且不更改环境(
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
文件,它将无效。这是真的不应该工作,还是我做错了什么?

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

如果包含脚本的目录位于
sys.path
,则可以在该目录中创建
sitecustomize.py
。这将在Python启动时加载。在
sitecustomize.py
中,您可以执行以下操作:

import site
site.addsitedir('/some/dir/you/want/on/the/path')
这不仅会添加该目录,而且会将其添加为“站点目录”,从而处理那里的PTH文件。如果您想创建自己的类似于
的个人
网站包
-的目录,这非常方便

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

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

# script.py
import makepath

编辑:同样,根据,在
%APPDATA%\Python\PythonXY\site packages
(在Windows上)中可能存在特定于站点的目录。您可以尝试这样做,如果您实际上拥有对该文件的写入权限(而不仅仅是脚本目录)。

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

问题是,这是用于教学类的,我正在尝试使其尽可能透明地工作。人们总是开始使用新的python并遇到麻烦。
文档和设置
下不是有一些文件夹算作“站点目录”吗?IIRC不同的安装人员会把东西放在那里——但不确定放在哪里,或者他们是否检查了
.pth
文件。是的,有,它与其他所有文件一起记录在网站上。我以为你说你只能对脚本目录进行写访问,但我现在明白了,我误读了。是的,谢谢,我发现
site.html
是可以查看的地方。但是,在那里放置
.pth
似乎不起作用……说明:如果所讨论的路径包含鸡蛋,您的解决方案将不起作用(甚至附加到
sys.path
)。这才是我问题的真正根源。对于常规模块,它可以正常工作。也许你可以向未来的读者澄清(或者如果你知道如何解决这个问题,我会更高兴;-)。我认为对于鸡蛋,你应该将鸡蛋本身添加为路径,而不是包含它的目录。但是,是的,在任何情况下,我都不会假设对常规模块起作用的东西对鸡蛋起作用。一般来说,您可能应该提到您是否使用的是鸡蛋,而不仅仅是常规安装的模块,因为鸡蛋在某些方面有点特殊(正如您所发现的),而不是根据公认的答案。您能指出文档中支持您的声明的地方吗?我在安装opencv后一直遇到venv设置问题-似乎影响了我所有的venv,所以我猜一些全局设置已经更改。阅读这里的文档第3段,它清楚地说您可以将.pth文件添加到python路径上的任何目录中:“最方便的方法是将路径配置文件添加到已经在python路径上的目录中,通常是添加到…/site packages/目录中。”我已经这样做了,您是对的,它不起作用!也许你能帮我解释一下?@alexis负责加载这些文件的代码是/usr/lib/python3.7/site.py(取决于你的平台和python版本)。我读了一些书,我不确定。并非sys.path中的所有条目都相等。我认为只有python安装目录和站点包才会查找.pth文件。