2011-07-06 34 views
3

目标是有一个通用目录,我可以在网络上添加包,这些包自动添加到sys.path,而无需每次运行site.addsitedirsys.path.append包。有没有办法做到这一点?嵌套的.pth文件或从网络加载额外的网站目录

背景:我有一个小型的用户网络,他们都需要访问相同的脚本。每次我想为它们添加一个新包时,我都会将路径添加到它们的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,保持一个相对干净的文件夹。我希望这是有道理的,并感谢您的帮助!

+0

只需将单独的'.pth'文件添加到Python的普通site-packages目录中即可。这样做有什么问题?为什么要添加另一个文件和这个“间接”? –

+0

@ S.Lott:主要是因为我不想在每次向网络上的每个人添加新软件包时更新/添加.pth文件。我想做一次性设置,然后在那之后更新网络目录。 – TorelTwiddler

+0

系统管理没有“皇室之路”。您应该可以协调自己编写,调试和支持用户的安装程序,以将软件包添加到其各种Python安装中。要么。为所有用户使用一个共享目录。 –

回答

1

你有几个选择:

  • 修改site.py文件 - 查找PREFIXES列表和网络路径添加到它:
  • 有一个自订在每台机器的定点.pth文件包装与以下行文件夹:

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

缺点使用site.py是当你升级到不同的python时,你必须在所有机器上找到并调整全部site.py。使用自定义.pth文件可以简单地复制到新的“网站包”文件夹中。

这两种解决方案都允许您设置网络位置,就像正常的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) 

只是提醒 - 如果服务器变得不可用,那么所有的网络软件包也是如此。

+0

我不相信sys.path.append会在附加位置加载.pth文件。至少,它不在Python 2.7的virtualenv内。 –