项目
目录结构
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脚本或者其他的都可以.