使用Python.pth文件假定无法访问站点包目录

使用Python.pth文件假定无法访问站点包目录,python,path,packages,sys.path,Python,Path,Packages,Sys.path,在我当前的系统中,所有目录(如.local/lib/python2.7/site packages)都在全局管理员控制下,并在用户之间进行标准化 然而,我想添加一个我自己的目录集合,在启动时将其放入PYTHONPATH,最好是以一种易于管理的方式,如 有没有一种方法可以通过普通的Python通道实现这一点,但不需要对Python查找路径元素的标准位置进行任何更改 我特别想知道是否有一种方法可以将sitecustomize.py或usercustomize.py这样的文件放在PYTHONPATH中

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

然而,我想添加一个我自己的目录集合,在启动时将其放入PYTHONPATH,最好是以一种易于管理的方式,如

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

我特别想知道是否有一种方法可以将
sitecustomize.py
usercustomize.py
这样的文件放在PYTHONPATH中的文件夹中的任何位置,并期望它们会自动执行?(而不是通过将此类文件放在像
网站包
这样的管理目录中来实现这种行为,这正是我想要避免的。)

我的目标是将一个文本文件
path.pth
放在某个目录中,比如
/home/My_configs/python_stuff/
,然后只需将该目录通过
.bashrc
文件放在PYTHONPATH中即可。然后,至少,我只手动维护一个要添加的路径,通过更改
.pth
文件中的内容,可以更容易地控制版本或参数化加载的内容

如果没有管理限制,我可以在
站点包中轻松地做到这一点,但我需要一个完全超出此范围的解决方案

/.bashrc
中,我有:

export PYTHONPATH=/home/ems/python_paths/:$PYTHONPATH
在目录
/home/ems/python\u paths/
中,我只有两个文件,
sitecustomize.py
paths.pth
(但我也尝试在那里添加一个
\u init\uuuuuuuuuuuuuuuuuuuuuuuuuuu.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/
path.pth
的内容正是过去在
.bashrc
中直接导出的内容,例如,允许我从util.DataManager导入DataManager
作为顶级导入

但是在设置了上面的各种文件,在
.bashrc
中将
导出到
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
ems@computer~$python
Enthound Python发行版——www.enthound.com
版本:7.3-2(64位)
Python 2.7.3 | EPD 7.3-2(64位)|(默认值,2012年4月11日,17:52:16)
linux2上的[GCC 4.1.2 20080704(Red Hat 4.1.2-44)]
键入“学分”、“演示”或“热情思考”以了解更多信息。
你好
>>>从util.DataManager导入DataManager
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为util.DataManager的模块
专门针对每个用户
站点包
目录的创建,以处理用户对系统范围
站点包
没有管理员访问权限的情况

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


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

您链接到的问题的答案已经说明了如何做到这一点。您需要将
sitecustomize.py
放在Python路径的目录中,并让它使用
addsitedit
/some/other/dir
添加为站点dir,然后
.pth
中的文件将起作用。您也可以使用。不,这不起作用。如果您阅读
站点
文档,文件
sitecustomize.py
usercustomize.py
似乎需要显示在
站点包
中,而不是路径上的“其他”文件夹中。它不会自动执行它们,除非它在一个特殊的地方找到它们,我想知道如何绕过它。是的,它做到了。正如这个答案和文档所说,Python只是导入sitecustomize,只要您的
sitecustomize
位于Python路径上的任何位置,它就可以工作。这对我来说不起作用。我在
.bashrc
中导出了
/home/ely/configs/python\u path/
PYTHONPATH
,我在那里有一个
\uuuu init\uuuuuuuuuuuuuuuuuuuuuupy
文件,以及
sitecustomize.py
(也尝试了
usercustomize.py
),其中包含了添加我的
.pth
文件的相关代码。如果我在执行此操作后获取
.bashrc
,则启动时不会执行
sitecustomize.py
文件。请编辑您的问题以显示
sitecustomize.py
的内容和
sys.path
的内容。另外,为什么您有
\uuuu init\uuuu.py
?如果您想直接导入
sitecustomize.py
(这是
site
将要做的),您不希望这样做,这可能会让它感到困惑。