python命令行程序打包

我们知道在linux下通过命令行调用程序其实就是先把程序编译生成二进制文件,然后再把文件放入到PATH中,就可以直接通过文件名进行调用了,这里python程序也不例外。前面讲过了如何将一个python程序打包并发布,这里就讲一下命令行的python打包发布和下载安装过程。

我们还是利用前面博客中的myproject为例,在原来的基础上添加一些代码:

.├── setup.py└── src    ├── bin    │?? ├── command-line    │?? └── myproject    └── myproject        ├── cmds.py        ├── __init__.py        └── __init__.pyc3 directories, 6 files

可以看出,比myproject一共多了三个文件command-line, myproject, cmds.py三个文件和bin这个文件夹。下面对他们进行详细的介绍:command-line,mypreject文件这两个文件的内容很简单

$ 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这个文件中添加下面这个配置:

scripts=['src/bin/command-line', 'src/bin/myproject'],

然后安装修改后的源码包:

$ python setup.py install...Installing command-line script to /search/virtual/pypienv/binInstalling myproject script to /search/virtual/pypienv/bin...

我们可以看到上面的输出,其含义就是把这两个脚本安装在了bin目录下,由于这个路径是PATH路径,所以可以直接通过命令进行执行了,下面是执行的效果:

$ command-line   Hello World!$ myproject  welcome to command line mod!

还有一个文件是cmds.py这个文件也是可以通过命令行直接运行的,只不过是通过另外一种方式进行安装的先看一下cmds.py的内容吧:

$ cat cmds.py   import myproject   def main():      myproject.test()

可以看出,其实这个文件和command-line一样,引用了myproject并输出,唯一不同的是他自己顶一个了一个函数main来调用。同样setup.py中也要添加一个配置,来找到这个文件并对其进行编译:

entry_points = {                 'console_scripts': ['cmds=myproject.cmds:main'],                }

这个配置和前面的不一样,并且里面指定了要执行的脚本的函数名,通过从新安装我们可以看:

$ python setup.py install  ...  Installing cmds script to /search/virtual/pypienv/bin  ...

同样,这个文件编译后也放到在PATH下,通过命令行可以运行:

$ cmds   Hello World!

到这里一个通过命令行运行的包就介绍完了.同样我们可以这个写好的包上传到私有源,然后在其他机器上下载安装,同样可以运行~

python命令行程序打包

相关文章:

你感兴趣的文章:

标签云: