【问题标题】:Using .pth files使用 .pth 文件
【发布时间】:2013-02-18 22:59:04
【问题描述】:

我正在尝试在我没有对全局 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 文件,它就没有效果。这真的不应该工作,还是我做错了什么?

【问题讨论】:

    标签: python


    【解决方案1】:

    the documentation 中所述,只有在站点包目录中的 PTH 文件才会被处理。 (更准确地说,如果它们在“站点目录”中,则会对其进行处理,但“站点目录”本身是 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 上)。你可以试试,如果事实上你有写权限(而不仅仅是你的脚本目录)。

    【讨论】:

    • 问题是这是为了教授课程,我试图让它尽可能接近透明地工作。人们总是在启动新的 python 并遇到麻烦。 Documents and Settings 下不是有一些文件夹算作“站点目录”吗? IIRC 的各种安装程序会将东西放在那里——但不确定在哪里,或者是否检查了它们是否有 .pth 文件。
    • 是的,有,它与其他所有内容一起记录在 docs.python.org/2/library/site.html#site.USER_SITE 。我以为你说你只有对脚本目录的写权限,但我现在看错了。
    • 是的,谢谢,我发现site.html 是可以查看的地方。但是,将.pth 放在那里似乎不起作用...
    • 澄清:如果有问题的路径包含鸡蛋,您的解决方案将不起作用(甚至附加到 sys.path)。那是我问题的真正根源。对于常规模块,它工作正常。也许您可以为未来的读者澄清(或者如果您知道如何解决这个问题,我会更高兴;-))
    • 我认为对于鸡蛋,您应该将鸡蛋本身添加为路径,而不是包含它的目录。但是,是的,无论如何我都不会认为适用于常规模块的东西适用于鸡蛋。一般来说,您可能应该提及是否使用鸡蛋而不是仅使用常规安装的模块,因为鸡蛋在某些方面有点特殊(正如您所发现的那样)。
    【解决方案2】:

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

    【讨论】:

    • 不符合公认的答案。您能指出文档中支持您的主张的地方吗?
    • 我在安装 opencv 后遇到了 venv 设置问题 - 似乎影响了我所有的 venv,所以我猜一些全局已经改变。在此处阅读文档docs.python.org/3.7/install/… 第 3 段,它清楚地表明您可以将 .pth 文件添加到 python 路径上的任何目录:“最方便的方法是将路径配置文件添加到 Python 路径上已经存在的目录中,通常是.../site-packages/ 目录。”我已经做到了,你是对的,它不起作用!也许你能帮我解释一下?
    • @alexis 负责加载这些文件的代码是 /usr/lib/python3.7/site.py (取决于您的平台和 python 版本)。我读了一点,我不确定。并非 sys.path 中的所有条目都相等。我认为只查找 python 安装目录和站点包以查找 .pth 文件。
    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 2010-11-25
    • 1970-01-01
    • 2017-09-11
    • 2014-10-31
    • 2010-10-16
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多