Python中, 使用setup.py和console_scripts参数创建安装包和shell命令

项目

目录结构

setup_test
├── my_project
│   ├── __init__.py
│   └── __main__.py
└── setup.py

文件内容 - __setup__.py

from setuptools import setup

setup(name='my_project',
      version='0.1.0',
      packages=['my_project'],
      entry_points={
          'console_scripts': [
              'my_project = my_project.__main__:main'
          ]
      },
      )

文件内容 - __main__.py

import sys


def main(args=None):
    """The main routine."""
    if args is None:
        args = sys.argv[1:]

    print("This is the main routine.")
    print("It should do something interesting.")

    # Do argument parsing here (eg. with argparse) and anything else
    # you want your project to do.

if __name__ == "__main__":
    print '__name__ == __main__'
    main()

文件内容 - __init__.py

# 空

使用

方式1 - python -m py_file

cd setup_test
python -m my_project.__main__
# 输出:
# __name__ == __main__
# This is the main routine.
# It should do something interesting.

方式2 - console_scripts

# 制作安装包
cd setup_test
python setup.py sdist # sdist指Source Distibution; bdist指Binary Distribution即解压安装包就可以完成安装

# 使用安装包
cd dist
tar xzf my_project-0.1.0.tar.gz
cd my_project-0.1.0

# 安装
python setup.py install

# 验证command-line
which my_project
# /usr/local/bin/my_project

# 执行command-line
/usr/local/bin/my_project
# 输出:
# This is the main routine.
# It should do something interesting.

# 卸载
pip uninstall my_project
rm -rf /usr/local/bin/my_project

方式3 - scripts

需要修改目录结构(增加bin目录和相应的可执行脚本文件), 在setup.py里使用scripts参数, 而非console_scripts.具体可以看这里.

scripts 参数

第一种方法是把你的命令写在一个单独的文件中:

funniest/
    funniest/
        __init__.py
        ...
    setup.py
    bin/
        funniest-joke
    ...
bin/funniest-joke 如下:

#!/usr/bin/env python

import funniest
print funniest.joke()
在``setup()`` 添加:

setup(
    ...
    scripts=['bin/funniest-joke'],
    ...
)
当我们安装这个包的时候, setuptools会把你的脚本复制到PATH路径下:

$ funniest-joke
使用这种方法的好处是可以使用非Python的语言的编写, funniset-joke 可以是一个shell脚本或者其他的都可以.

参考

  1. Python Apps the Right Way: entry points and scripts
  2. 命令行脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值