Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套的.pth文件或从网络加载额外的站点目录_Python - Fatal编程技术网

Python 嵌套的.pth文件或从网络加载额外的站点目录

Python 嵌套的.pth文件或从网络加载额外的站点目录,python,Python,我们的目标是拥有一个通用目录,我可以在网络上添加自动添加到sys.path的包,而无需每次导入所述包时运行site.addsitedir或sys.path.append。有办法做到这一点吗 背景:我有一个小的用户网络,他们都需要访问相同的脚本。每次我想添加一个新的包供他们使用时,我都会将路径添加到他们的PYTHONPATH环境变量中。用户群开始增长,软件包的数量也开始增长 如果我能在网络上设置一个master.pth,当他们启动任何脚本时加载(不需要在所有脚本中添加额外代码),我将非常感激。但是

我们的目标是拥有一个通用目录,我可以在网络上添加自动添加到
sys.path
的包,而无需每次导入所述包时运行
site.addsitedir
sys.path.append
。有办法做到这一点吗

背景:我有一个小的用户网络,他们都需要访问相同的脚本。每次我想添加一个新的包供他们使用时,我都会将路径添加到他们的
PYTHONPATH
环境变量中。用户群开始增长,软件包的数量也开始增长

如果我能在网络上设置一个
master.pth
,当他们启动任何脚本时加载(不需要在所有脚本中添加额外代码),我将非常感激。但是,您似乎无法嵌套
.pth
文件,因此简单地将指针
.pth
添加到
主.pth
目录似乎不起作用

编辑:关于@S.Lott的评论(对于评论来说有点大):以wxPython为例。三个对象被放置到站点包目录中:wxversion.py、一个名为wx-2.8-msw-unicode的目录和一个
.pth
文件。.pth文件指向该目录,其中包含所有可导入的包(wx、wxPython等)。我目前有三个其他软件包,它们的结构类似,其中一个有几个基本模块。我需要将所有可导入的模块移动到同一个目录中,以获得所需的结果


但是,如果
.pth
文件可以“嵌套”,我可以将所有这些目录添加到
master.pth
,保持相对干净的文件夹。我希望这是有道理的,谢谢你的帮助

您有两个选择:

  • 修改您的
    site.py
    文件--查找
    前缀列表,并将您的网络路径添加到其中:
  • 在每台计算机的site packages文件夹中都有一个自定义.pth文件,其中包含以下行:

    import sys; sys.path.append('/network/path/to/modules_and_packages')
    
使用site.py的缺点是,当您升级到不同的python时,您必须在所有机器上查找并调整allsite.pys。使用自定义的.pth文件,只需将其复制到新的“站点包”文件夹中即可

这两种解决方案都允许您像正常的
站点包
文件夹一样设置网络位置。例如:

m:\python_site_packages\   # network drive and folder
   |
   |- dbf.py  # for accessing dBase III and VFP .dbf files
   |
   |- web\
       |- __init__.py
       |- application.py
       |- (etc)

只是提醒一下——如果服务器不可用,那么所有网络包也将不可用。

只需将单独的
.pth
文件添加到Python的普通站点包目录中就可以了。那样做有什么不对?为什么要添加另一个文件和这个“间接寻址”?@S.Lott:主要是因为我不想在每次向网络上的每个人添加新包时更新/添加
.pth
文件。我想做一次安装,然后更新网络目录。系统管理没有“皇家大道”。您可能需要编写、调试和支持安装程序,以便用户将包添加到各种Python安装中。或为您的所有用户使用一个共享目录。使用一个共享目录是最接近我要查找的内容。我想我将不得不生活在一个混乱的共享目录中(所有可导入的包必须在同一个目录中)。“混乱的共享目录”?但很多人都是这样做的,让事情简单整洁。我不明白你在抱怨什么。请详细说明。我不相信sys.path.append会在附加位置加载
.pth
文件。至少,它不是在Python2.7上的virtualenv中实现的。