Python中如何实现pypi安装后在$PATH目录下增加可执行文件?

像 you-get 一样

$ pip3 install you-get
$ which you-get
/usr/local/bin/you-get
$ cat /usr/local/bin/you-get
#!/usr/local/opt/python/bin/python3.7

-- coding: utf-8 --

import re import sys

from you_get.main import main

if name == ‘main’: sys.argv[0] = re.sub(r’(-script.pyw?|.exe)?$’, ‘’, sys.argv[0]) sys.exit(main())

查看了源码和 setup.py ,并没有看出什么端倪。


Python中如何实现pypi安装后在$PATH目录下增加可执行文件?

8 回复

django-admin 同理


setup.py 里用 entry_points 就行。比如你的包叫 mytool,主程序在 mytool/cli.py 里,函数叫 main,就这么写:

from setuptools import setup, find_packages

setup(
    name="mytool",
    version="0.1",
    packages=find_packages(),
    entry_points={
        'console_scripts': [
            'mytool=mytool.cli:main',
        ],
    },
)

用户 pip install 之后,系统就会在 PATH 里生成一个叫 mytool 的脚本,直接执行 mytool 命令就会调用 mytool.cli.main() 函数。

如果用的是 pyproject.toml(现在更推荐这个),写法也差不多:

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "mytool"
version = "0.1"

[project.scripts]
mytool = "mytool.cli:main"

核心就这点东西,entry_points 或者 project.scripts 配好就行。

我发布了一个 pypi,叫作 ghtrending,每次都要 python3 -m ghtrending 很麻烦,想简化成 ghtrending

setup 函数里加上:

entry_points = {
‘console_scripts’: [‘ghtrending=ghtrending.main:main’]
}

https://packaging.python.org/guides/distributing-packages-using-setuptools/#id59

你看看 you-get 的 setup.py 怎么写的就行了

感谢,我试一下,因为没看到 setup 里面由路径相关的设置所以没意识到。

感谢,我试一下。

回到顶部