我有一个我已创建的Python包,并且我使用setuptools.setup()
来安装它。该软件包包含可执行脚本,使用scripts
函数的setup()
参数。
我这样安装:
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
(所有者= root group = root)。所有可执行脚本在开发区域中都具有-rwxr-xr-x
权限。
答案 0 :(得分:7)
这个问题现在有点老了,但我希望我的答案对于碰巧像我一样找到它的人都会有用。
我的包裹遇到了同样的问题。显然,setuptools和pip(我的pip都是1.5.6
)都没有明确处理权限。您可以选择手动更改权限,也可以从scripts
参数迁移到entry_points
。
这很棘手且足够克服,但应该有效。我们的想法是,如果安装过程将您的可执行文件放到/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))
entry_points
setuptools为setup()
名为entry_points
的{{1}}提供了一个选项。它接受包含密钥console_scripts
和gui_scripts
的字典,您可以按如下方式使用:
setup(
# Package name, version, author, links, classifiers, etc
entry_points = {
'console_scripts': [
'myexecfile = mypackage.mymainmodule:mymainfunction'
]
}
)
此语句会自动生成myexecfile
可执行文件,该mymainfunction
来自mymainmodule
mypackage
mymainfunction
,sys.argv
可以很容易地成为您正在分发的软件包。
您应该知道的问题是入口点函数(在此示例中为sys.argv
)可能没有任何参数。如果您从可执行文件中将select count(distinct(a.mat)),count(distinct(c.mail)) as nb
from aca as a
left join c on c.mat=a.mat
group by a.mat
having nb > 0
order by nb desc
作为参数传递给main函数,则应该重写函数以自行检索和解析namespace ApiMaps\ApiMapBundle\Controller;
class GetApiController extends Controller {
public function getapiAction() {
----gettting data from api
----save it in data base
return new Response();
。
Chris Warrick写了一篇关于这个名为Python Apps The Right Way的功能的好文章,你可能会发现它很有用。