gpt4 book ai didi

python - 如何使用 Python Setuptools 指定脚本的执行权限

转载 作者:太空狗 更新时间:2023-10-29 22:26:12 26 4
gpt4 key购买 nike

我有一个我创建的 Python 包,我正在使用 setuptools.setup() 来安装它。该软件包包括可执行脚本,这些脚本使用 setup() 函数的 scripts 参数。

我是这样安装的:

sudo python setup.py install

安装后,可执行脚本位于/usr/local/bin。唯一的问题是权限是:

-rwxr-x---  1 root root   57 Aug 23 15:13 example_script*

代替:

-rwxr-xr-x  1 root root   57 Aug 23 15:13 example_script*

有人知道我如何指定输出可执行文件的权限或者为什么默认不允许任何人执行吗?

仅供引用:我的umask是0027/usr/local/bin/的权限是drwxr-xr-x (owner=root group=root) .所有可执行脚本在开发区都有-rwxr-xr-x权限。

最佳答案

这个问题现在有点老了,但我希望我的回答对碰巧和我一样找到它的人有用。

我的包裹也遇到了同样的问题。显然,setuptools 和 pip(我的 pip 是 1.5.6)都没有显式处理权限。您的选择是手动更改权限,或从 scripts 参数迁移到 entry_points

1) 手动更改文件权限

这已经足够棘手和笨拙了,但应该可行。这个想法是,如果安装过程将您的可执行文件放入 /usr/local/bin,它也有权对文件进行 chmod 以包含可执行标志。在 setup.py 中,在 setup() 子句之后,运行如下内容:

execpath = '/usr/local/bin/yourexec'

if os.name is 'posix' and os.path.exists(execpath):
os.chmod(execpath, int('755', 8))

2) 迁移到entry_points

setuptools 为您的 setup() 提供了一个名为 entry_points 的选项。它接受带有键 console_scriptsgui_scripts 的字典,您可以按如下方式使用它们:

setup(
# Package name, version, author, links, classifiers, etc
entry_points = {
'console_scripts': [
'myexecfile = mypackage.mymainmodule:mymainfunction'
]
}
)

这条语句会自动生成myexecfile可执行文件,它从mypackagemymainmodule调用mymainfunction,可以很容易地您正在分发的包。

您应该知道的是入口点函数(本例中的mymainfunction)可能没有任何参数。如果您将 sys.argv 作为参数从可执行文件传递给主函数,则应重写该函数以自行检索和解析 sys.argv

Chris Warrick 写了一篇关于此功能的好文章,名为 Python Apps The Right Way ,您可能会发现它很有用。

关于python - 如何使用 Python Setuptools 指定脚本的执行权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25466878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com