我们知道在linux下通过命令行调用程序其实就是先把程序编译生成二进制文件,然后再把文件放入到PATH中,就可以直接通过文件名进行调用了,这里python程序也不例外。前面讲过了如何将一个python程序打包并发布,这里就讲一下命令行的python打包发布和下载安装过程。
我们还是利用前面博客中的myproject为例,在原来的基础上添加一些代码:1
2
3
4
5
6
7
8
9
10
11
12.
├── setup.py
└── src
├── bin
│ ├── command-line
│ └── myproject
└── myproject
├── cmds.py
├── __init__.py
└── __init__.pyc
3 directories, 6 files
可以看出,比myproject一共多了三个文件command-line, myproject, cmds.py三个文件和bin这个文件夹。下面对他们进行详细的介绍:
command-line,mypreject文件
这两个文件的内容很简单1
2
3
4
5
6
7$ cat command-line
#!/usr/bin/env python
import myproject
myproject.test()
$ cat myproject
#!/usr/bin/env python
print 'welcome to command line mod!\n'
可以看出,command-line文件只是调用了myproject的test函数,二myproject只是输出了一个字符串,为了能够执行这两个文件,并且是通过命令行的方式,我们需要在setup.py这个文件中添加下面这个配置:1
scripts=['src/bin/command-line', 'src/bin/myproject'],
然后安装修改后的源码包:1
2
3
4
5$ python setup.py install
...
Installing command-line script to /search/virtual/pypienv/bin
Installing myproject script to /search/virtual/pypienv/bin
...
我们可以看到上面的输出,其含义就是把这两个脚本安装在了bin目录下,由于这个路径是PATH路径,所以可以直接通过命令进行执行了,下面是执行的效果:1
2
3
4$ command-line
Hello World!
$ myproject
welcome to command line mod!
还有一个文件是cmds.py这个文件也是可以通过命令行直接运行的,只不过是通过另外一种方式进行安装的
先看一下cmds.py的内容吧:1
2
3
4$ cat cmds.py
import myproject
def main():
myproject.test()
可以看出,其实这个文件和command-line一样,引用了myproject并输出,唯一不同的是他自己顶一个了一个函数main来调用。
同样setup.py中也要添加一个配置,来找到这个文件并对其进行编译:1
2
3entry_points = {
'console_scripts': ['cmds=myproject.cmds:main'],
}
这个配置和前面的不一样,并且里面指定了要执行的脚本的函数名,通过从新安装我们可以看:1
2
3
4$ python setup.py install
...
Installing cmds script to /search/virtual/pypienv/bin
...
同样,这个文件编译后也放到在PATH下,通过命令行可以运行:1
2$ cmds
Hello World!
到这里一个通过命令行运行的包就介绍完了.
同样我们可以这个写好的包上传到私有源,然后在其他机器上下载安装,同样可以运行~