【问题标题】:setting permissions of python module (python setup install)设置python模块的权限(python setup install)
【发布时间】:2011-02-14 18:53:54
【问题描述】:

我正在为要安装在一组异构资源上的 python 模块配置基于 distutils 的 setup.py。由于异质性,模块的安装位置在每台主机上并不相同,但 disutils 会选择主机特定的位置。

我发现使用 disutils 安装模块时没有 o+rx 权限(尽管在运行 setup.py 之前设置了 umask)。一种解决方案是手动更正此问题,但我想要一种适用于异构安装目标的自动化方法。

例如,有没有办法从 setup.py 中提取安装的结束位置?

还有其他建议吗?

【问题讨论】:

    标签: python permissions distutils setup.py


    【解决方案1】:

    我对 disutils 不是很了解,但我猜如果您深入研究它直到找到写入文件的位置,那么您将在该行看到路径变量。

    this page 可能会帮助你

    【讨论】:

      【解决方案2】:

      os.path.dirname(__file__) 可能是您正在寻找的。模块中的 __file__ 返回加载模块的路径。

      假设你的模块是一个包含Something.py的文件夹,在setup.py中:

      import os
      #setup(...) call here
      from yourmodule import Something
      print os.path.dirname(Something.__file__)
      

      唯一的问题是如果你的文件结构中你的模块与 setuputils 在同一个目录中。在这种情况下,python 加载器会优先从当前目录加载 yourmodule.Something。

      两个有点生硬但有效的颠覆选项可能是任一

      1. 从 python 路径中删除当前目录,强制它从现在存在于站点包中的文件中加载:

        导入系统 sys.path = sys.path[1:]

      2. 在 import 语句之前临时重命名 yourmodule 文件夹。

      使用选项 1,整个事情是:

      import os
      import sys
      
      #setup(...) call here
      
      #Remove first entry in sys.path which is current folder (probably impl dependent, but for practical purposes is consistent)
      sys.path = sys.path[1:]
      from yourmodule import Something
      print os.path.dirname(Something.__file__)
      

      我刚刚使用我的 setup.py 之一对其进行了测试,效果很好。祝你好运!

      【讨论】:

        【解决方案3】:

        我发现使用disutils安装模块时没有o+rx权限

        我现在不记得 distutils 是按原样复制具有其权限的文​​件还是只是复制内容。

        (尽管在运行 setup.py 之前设置了 umask)

        我不确定 umask 和从 Python 复制文件应该如何交互; umask 适用于系统调用还是需要 Python 代码明确注意?

        例如,有没有办法提取安装的结束位置 在 setup.py 中?

        有一个,有点令人费解。你会如何处理这些信息?

        【讨论】:

          猜你喜欢
          • 2013-01-21
          • 1970-01-01
          • 2021-08-08
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 2016-09-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多