在我目前的系统中,.local/lib/python2.7/site-packages
等所有目录都受全局管理控制,并且在用户之间标准化。
但是,我想添加一个我自己的目录集合,在启动时加入PYTHONPATH,最好以一种易于管理的方式,如using a .pth
file within a secondary site directory.
有没有办法可以通过普通的Python通道实现这一点,但没有需要对Python查找路径元素的标准位置进行任何类型的更改?
我特别想知道是否有办法将sitecustomize.py
或usercustomize.py
等文件放在PYTHONPATH中的文件夹中,并期望它们会自动执行吗? (而不是通过将此类文件放在像site-packages
这样的管理目录中来获取此行为,这是我想要避免的。)
我的目标是将文本文件paths.pth
放在某个目录中,例如/home/my_configs/python_stuff/
,然后 只需放置该目录在PYTHONPATH via中,例如一个.bashrc
文件。然后,至少,我只手动维护一个要添加的路径,并且通过更改.pth
文件中的内容,更容易进行版本控制或参数化加载的内容。
如果没有管理员限制,我可以在site-packages
中做到这一点,但我需要一个完全不在其中的解决方案。
在/.bashrc
我有这个:
export PYTHONPATH=/home/ems/python_paths/:$PYTHONPATH
在目录/home/ems/python_paths/
中,我只有两个文件,sitecustomize.py
和paths.pth
(但我也尝试在其中添加__init__.py
,这(正如预期的那样)没有帮助)。这两个文件如下所示:
sitecustomize.py
import site
site.addsitedir("/home/ems/python_paths/")
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
作为顶级导入。
但是在设置了上面的各种文件后,在exports
中将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
答案 0 :(得分:1)
有PEP 370专门针对每用户site-packages
目录的创建,以处理用户无权访问系统范围site-packages
的情况。
例如在Unix(包括Mac OS)上,假设有人使用Python 3.6,可以创建以下目录并在其中放置.pth
个文件
~/.local/lib/python3.6/site-packages