python - 使用 Python .pth 文件假设无权访问 site-packages 目录

标签 python path package sys.path

在我当前的系统中,所有目录(例如 .local/lib/python2.7/site-packages)都在全局管理员控制之下,并且在用户之间是标准化的。

但是,我想添加一个我自己的目录集合,以便在启动时将其引入 PYTHONPATH,最好以一种易于管理的方式,如 using a .pth file within a secondary site directory.

有没有一种方法可以通过普通的 Python channel 实现此目的,但不需要对 Python 查找路径元素的标准位置进行任何类型的更改?

我特别想知道是否有一种方法可以将 sitecustomize.pyusercustomize.py anywhere 这样的文件放在PYTHONPATH 中的文件夹并期望它们将被自动执行? (而不是通过将此类文件放在 site-packages 之类的管理目录中来获得此行为,这是我想要避免的。)

我的目标是将文本文件 paths.pth 放在某个目录中,例如 /home/my_configs/python_stuff/ 然后 需要将 该目录仅 通过例如放置在 PYTHONPATH 中一个 .bashrc 文件。然后,至少,我只手动维护一个要添加的路径,并且通过更改 .pth 文件中的内容来版本控制或参数化加载的内容会更容易。

如果没有管理限制,我可以在 site-packages 中轻松完成此操作,但我需要一个完全不受此限制的解决方案。

/.bashrc 我有这个:

export PYTHONPATH=/home/ems/python_paths/:$PYTHONPATH

在目录 /home/ems/python_paths/ 我只有两个文件,sitecustomize.pypaths.pth(但我我也尝试在那里添加一个 __init__.py,这(正如预期的那样)没有帮助)。这两个文件如下所示:

sitecustomize.py

import site
site.addsitedir("/home/ems/python_paths/")

路径.pth

/home/ems/ws/Research/Projects/python-util/src/util/
/home/ems/ws/Research/Projects/python-efficacy/src/efficacy/

paths.pth 的内容正是过去在 .bashrc 中直接导出的内容,例如,允许我从 util 执行 。 DataManager 导入 DataManager 作为顶级导入。

但是在设置上面的各种文件之后,在 .bashrc 中将 exports 注释掉到 PYTHONPATH,并获得一个新的终端,我明白了这个:

ems@computer ~ $ python
Enthought Python Distribution -- www.enthought.com
Version: 7.3-2 (64-bit)

Python 2.7.3 |EPD 7.3-2 (64-bit)| (default, Apr 11 2012, 17:52:16)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "credits", "demo" or "enthought" for more information.
Hello
>>> from util.DataManager import DataManager
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named util.DataManager

最佳答案

PEP 370特别针对每个用户 site-packages 目录的创建,以处理用户对系统范围的 site-packages 没有管理员访问权限的情况。

例如在 Unix(包括 Mac OS)上,假设一个人使用的是 Python 3.6,可以创建以下目录并将 .pth 文件放入其中

~/.local/lib/python3.6/site-packages

关于python - 使用 Python .pth 文件假设无权访问 site-packages 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914527/

相关文章:

Python : Why do we need a build tool, 你对 CI 有什么建议?

python - PostgreSQL Sqlalchemy 提交需要很多时间

python - pip install pickle 不工作 - 没有这样的文件或目录

c# - 如何更改 .net core 中 index.html 的默认路径?

javascript - 使用 require.js 包管理大型应用程序

linux - 配置重命名后以 rpm 规范重启服务

python - 从数据框中提取特征并将其转换为其他数据框?

python - 如何在 pandas 数据框中插入重复的列,并从新列的值中删除最后 3 个数字?

java - 通过 FileSystem 对象从文件系统读取

python - 如何判断mac和mac程序使用的是哪个python