1

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

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

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

还有其他建议吗?

4

3 回答 3

0

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

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

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

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

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

有一个,有点绕。你会用这些信息做什么?

于 2011-10-28T15:00:56.563 回答
0

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. 在导入语句之前临时重命名 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 之一对此进行了测试,效果很好。祝你好运!

于 2010-05-03T07:33:19.153 回答
0

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

此页面可能对您有所帮助

于 2010-05-02T16:08:53.033 回答