我正在为要安装在一组异构资源上的python模块配置一个基于distutils的setup.py。由于异构性,每个主机上安装模块的位置并不相同,但是disutils会选择特定于主机的位置。
我发现该模块是在没有o+rx权限的情况下使用disutils安装的(尽管在运行setup.py之前设置了umask )。一种解决方案是手动纠正这个问题,但是我希望在异构安装目标上工作的自动方法。
例如,有没有办法从setup.py中提取安装的结束位置?
还有其他建议吗?
发布于 2010-05-03 00:08:53
我对disutils不是很了解,但我猜如果你深入研究它,直到你找到你的文件被写入的地方,你会在该行上看到path变量。
this page可能会对您有所帮助
发布于 2010-05-03 15:33:19
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。
有两个有点古怪但有效的选择来颠覆这两个选项
import sys sys.path = sys.path1:
对于选项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测试了它,它工作得很好。祝好运!
发布于 2011-10-28 23:00:57
我发现使用disutils在没有o+rx权限的情况下安装模块
我现在不记得distutils是按原样复制文件的权限,还是只是复制内容。
(尽管在运行setup.py之前设置了umask )
我不确定umask和从Python复制文件应该如何交互;umask是否适用于系统调用,或者Python代码是否需要显式地注意到它?
例如,有没有一种方法可以从setup.py中提取安装的结束位置?
有一个,有点复杂。你会用这些信息做什么?
https://stackoverflow.com/questions/2753966
复制相似问题