3

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

但是,我想添加我自己的目录集合,以便在启动时带入 PYTHONPATH,最好以易于管理的方式,例如使用.pth辅助站点目录中的文件。

有没有办法可以通过普通的 Python 通道实现这一点,但不需要对 Python 查找路径元素的标准位置进行任何更改?

我特别想知道是否有一种方法可以将文件放在 PYTHONPATH 中的文件夹中sitecustomize.pyusercustomize.py 任何位置,并期望它们会自动执行?(而不是通过将此类文件放在管理目录中来获得此行为,例如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.py并且paths.pth(但我也尝试在__init__.py那里添加一个,这(如预期的那样)没有帮助)。这两个文件如下所示:

网站定制.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,例如,允许我from util.DataManager import DataManager作为顶级导入进行。

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

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
4

1 回答 1

1

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

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

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

于 2017-12-16T09:02:08.303 回答