【问题标题】: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。
两个有点生硬但有效的颠覆选项可能是任一
-
从 python 路径中删除当前目录,强制它从现在存在于站点包中的文件中加载:
导入系统
sys.path = sys.path[1:]
在 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 中?
有一个,有点令人费解。你会如何处理这些信息?