设置python模块的权限(python setup install)

时间:2010-05-02 15:39:27

标签: python permissions distutils setup.py

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

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

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

还有其他建议吗?

3 个答案:

答案 0 :(得分:0)

我对disutils知之甚少,但我猜测如果你仔细研究它,直到你找到你的文件所在的地方,那么你将看到该行的路径变量。

this page可能会帮助您

答案 1 :(得分:0)

os.path.dirname(__ file__)可能就是你要找的东西。模块中的__file__返回模块加载的路径。

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

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

如果你的文件结构中的模块与setuputils在同一个目录中,那么唯一的问题就是它。在这种情况下,python加载器会优先加载你的模块。来自当前目录的东西。

两种有些破坏但有效的选择可能会破坏

  1. 从python路径中删除当前目录,强制它从site-packages中现有的文件加载:

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

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

  3. 使用选项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进行了测试,效果很好。祝你好运!

答案 2 :(得分:0)

  

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

我现在不记得distutils是否按原样复制文件,或只是复制内容。

  

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

我不确定如何从Python进行umask和文件复制; umask是否适用于系统调用,还是需要由Python代码明确注意?

  

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

有一个,有点复杂。你会对这些信息做些什么?