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

时间:2011-07-06 18:05:37

标签: python

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

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

如果我可以在启动任何脚本时加载的网络上设置master.pth(不需要额外的代码),我将非常感激。但是,似乎您无法嵌套.pth个文件,因此只需将指针.pth添加到master.pth目录似乎不起作用。

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

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

1 个答案:

答案 0 :(得分:1)

您有几个选择:

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

    import sys; sys.path.append('/network/path/to/modules_and_packages')
    

使用site.py的缺点是当你升级到另一个python时,你必须在所有机器上找到并调整所有 site.py。使用自定义.pth文件,只需复制到新的“site-packages”文件夹即可。

这两种解决方案都允许您设置网络位置,就像普通的site-packages文件夹一样。例如:

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

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