我正在为一个python模块配置基于distutils的setup.py,该模块将安装在异构资源集上。由于异构性,每个主机上安装模块的位置并不相同,但是disutils会选择特定于主机的位置。
我发现使用disutils安装模块没有o + rx权限(尽管在运行setup.py之前设置了umask)。一种解决方案是手动纠正此问题,但我想要一种适用于异构安装目标的自动化方法。
例如,有没有办法从setup.py中提取安装的结束位置?
还有其他建议吗?
答案 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加载器会优先加载你的模块。来自当前目录的东西。
两种有些破坏但有效的选择可能会破坏
从python路径中删除当前目录,强制它从site-packages中现有的文件加载:
导入系统 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进行了测试,效果很好。祝你好运!
答案 2 :(得分:0)
我发现使用disutils安装模块没有o + rx权限
我现在不记得distutils是否按原样复制文件,或只是复制内容。
(尽管在运行setup.py之前设置了umask)
我不确定如何从Python进行umask和文件复制; umask是否适用于系统调用,还是需要由Python代码明确注意?
例如,有没有办法提取安装的结束位置 来自setup.py?
有一个,有点复杂。你会对这些信息做些什么?