[英]How to create a shareable python distribution package that can be installed using pip?
[英]How to create a CLI in Python that can be installed with PIP?
您可以使用setuptools
执行此setuptools
一个不错的setup.py
示例(假设您的包需要 pandas 和 numpy):
import setuptools
setuptools.setup(
name='myscript',
version='1.0',
scripts=['./scripts/myscript'],
author='Me',
description='This runs my script which is great.',
packages=['lib.myscript']
install_requires=[
'setuptools',
'pandas >= 0.22.0',
'numpy >= 1.16.0'
],
python_requires='>=3.5'
)
您的目录应设置如下:
[dkennetz package]$ ls
lib scripts setup.py
里面的 lib 将是:
[dkennetz package]$ ls lib
myscript
myscript
内部将是:
[dkennetz package]$ ls lib/myscript
__main__.py
__init__.py
helper_module1.py
helper_module2.py
main 将用于调用您的函数并执行您想做的任何操作。
内部脚本将是:
[dkennetz package]$ ls scripts
myscript
myscript
的内容是:
#!/usr/bin/env bash
if [[ ! $@ ]]; then
python3 -m myscript -h
else
python3 -m myscript $@
fi
然后运行你做: python setup.py install
这将安装您的程序以及您在 setup.py 中的install_requires=[]
中包含的所有依赖项,并将myscript
作为命令行模块安装:
[dkennetz ~]$ myscript
使用console_scripts
挂钩到特定的 Python 方法(不调用整个可执行文件), setup.py
文件:
from setuptools import setup
setup(
...
entry_points = {
'console_scripts': ['mybinary=mymodule.command_line:cli'],
},
name='mymodule',
...
)
command_line.py
脚本将是:
import mymodule
def cli():
print("Hello world!")
项目目录如下所示:
myproject/
mymodule/
__init__.py
command_line.py
...
setup.py
假设您在 bash shell 中并且安装了 python 3 并且您希望能够执行您的请求,您需要将脚本文件的路径附加到您的主目录中的.bash_profile
文件中的 PATH 变量。 此外,在您的 python 脚本文件中,您需要将类似于以下内容的内容作为脚本的第一行:
#!/usr/bin/env python3
此外,您可以从脚本文件中删除扩展名 (.py),例如,在我上面的示例中,与 script.py 相比,文件名是一个脚本。
您还需要将文件名的权限设置为
chmod 755 文件名
如果您希望脚本可在系统范围内访问,则需要修改 /etc/profile 并添加到文件底部:
export PATH=$PATH:/path/to/script
或者,如果您将 python 脚本文件移动到/usr/local/bin
,则可能不需要进行任何配置文件更改,因为该目录通常已在 PATH 中。
要查看 PATH 的值,请在 shell 中发出以下命令
echo $PATH
我知道这个问题比较老,对于使用setuptools
的项目,肯定会使用Tombart 的答案
也就是说,我一直在使用诗歌,并且使用.toml
文件,如果这就是你使用的,因为这可能是其他人会搜索的内容,这就是你如何 package 一个带有 toml 文件的脚本(至少带有诗歌)
[project.scripts]
myscript = "mybinary=mymodule.command_line:cli"
不确定这是否适用于 flit 或任何其他 package 经理,但它适用于诗歌
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.