2016-04-15 62 views
1

在Ubuntu 14.04上安装Fabricsudo pip install fabric之后,我可以在控制台中使用fab命令,它实际上是一个可执行脚本“/ usr/local/bin/fab”。pip如何使包可执行?

据我所知,sudo pip install将把一个包放在/usr/local/lib/python2.7/dist-packages下,我在fabric/setup.py没有找到一些复制操作把脚本“fab”放到“/ usr/local/bin”中。

那么sudo pip install fabric如何以及何时将文件“fab”放入“/ usr/local/bin”?

回答

5

pip不这样做,包setup.py确实(通过setuptools library)。所有pip所做的是找到该软件包,将其下载并在该软件包中运行python setup.py install以进行安装。

setuptools有一个concept of entry points,任意配置插入Python代码寻找这些。其中一个入口点是console_scripts入口点,它命名命令以及用于运行它们的Python模块和函数。该setup.py file for Fabric有这样的:

entry_points={ 
    'console_scripts': [ 
     'fab = fabric.main:main', 
    ] 
}, 

这告诉setuptools创建fab命令,当你调用它是将运行fabric.main模块中的main()功能。

请参阅setuptools文档中的Automatic Script Creation section

+0

[自动脚本创建部分](https://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation)没有提到放置控制台脚本的位置。 所以“/ usr/loca/bin”是在setuptools中定义的,不能由软件包开发人员配置,是不是? – Chad

+1

@Chad:它由'sys.exec_prefx',IIRC定义,你安装'python'二进制文件的位置。 –

+1

@Chad:你总是可以创建一个virtualenv并在其中安装Fabric;那么使用virtualenv'bin /'路径。 –