Python附魔书 番外篇3 我写了个库,要怎么让别人通过pip安装呢?

我回来了

什么是pip

pip ,即 Pip Installs Packages 的缩写,是 Python 的包管理器,用于安装和管理 Python 包。我们可以使用pip install package安装对应的包。

这些包的默认来源,是PyPI(Python Package Index),是一个由 Python 社区维护的官方软件包仓库。开发者们可以将自己开发的 Python 包上传到 PyPI,供其他人下载和使用。我们常用的requestsPillow等仓库,就是由相应项目的开发者维护并上传到Pypi的。

如果你在Python中实现了一些不错的功能,并且想分享给更多人使用,那么可以将你的包上传到PyPI。

Python中的包(Package)

Python的包(package)是一个文件夹,其中包含一个__init__.py文件和若干个其他文件和文件夹。__init__.py文件可以是一个空文件,也可以包含初始化代码。
Python的包中可以包含其他py文件作为模块(module),也可以包含其他的包文件夹。
以下是一个简单的Python包示例

  my_package
  ├─my_subpackage
  │  └─__init__.py
  ├─__init__.py
  └─my_submodule.py

这个package的包名就是my_package,你可以通过import my_package导入这个包,或者通过from my_package import my_submodule引入子模块(或这个包中的任意对象)。

创建一个Python包项目

目录结构

program
├─my_package
│   ├─my_subpackage
│   │  └─__init__.py
│   ├─__init__.py
│   └─my_submodule.py
├─readme.md
└─setup.py

你需要新建一个自述文件(非必须,但是推荐。其中可以介绍你的项目),还有一个setup.py文件,用于打包项目。

以下是setup.py文件的模板。

import setuptools
import shutil

# 删除dist/目录
shutil.rmtree('dist', ignore_errors=True)

setuptools.setup(
    name="your_package_name",
    version="0.0.1",
    author="your_name",
    author_email="[email protected]",
    description="A brief introduction to the project",
    install_requires=[],    # 如果有第三方依赖可以在此列出
    long_description=open(r'readme.md', encoding='utf-8').read(),  # 读取readme自述文件
    long_description_content_type="text/markdown",
    url="https://github.com/my_name/my_repo",     # 你的项目主页,一般是GitHub仓库,其他URL也可以
    packages=setuptools.find_packages(),     # 自动列出项目下的包
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",   # 开源许可证
        "Operating System :: OS Independent",      # 这里的定义是系统无关(全平台兼容),如果你的包只能在部分特定系统上运行,需要修改。
    ],
)

另外,name="your_package_name",对应的是仓库名,也就是pip install xxx使用的那个名字,它可以和包的名字不同,但一定要独一无二。你可以在https://pypi.org/上搜索是否重名。

比如你的模块文件夹叫package,而仓库名是my_first_package,那么当这个包成功上传后,你应该使用pip install my_first_package安装这个包,然后使用import package引入它。

打包项目

python setup.py sdist bdist_wheel

使用此命令打包项目,dist/目录下会出现对应版本的压缩包或whl文件。接下来你就可以上传对应的包。

上传项目

在testPyPI上测试

创建账号和Token

https://test.pypi.org/ 用于在正式上传之前对你的上传流程进行测试。testPyPI上的管理员会定期清理上传的包,因此请仅用于临时测试。

https://test.pypi.org/上注册一个账户,并配置2FA验证。
https://test.pypi.org/manage/account/token/上,新建一个API key,并将其保管好,它只会显示一次

记得保存好创建的token

上传你的包

python -m twine upload --repository testpypi dist/*

在上传过程中,你需要输入刚才创建的token,可以直接粘贴。(如果你没有保存,那么麻烦重新创建一个)

等待完成,你可以在https://test.pypi.org/manage/projects/上查看你的包是否已经上传了。

并且可以用此命令测试包的安装

pip install --index-url https://test.pypi.org/simple/ --no-deps your_package_name

正式上传

当一切准备妥当,你就可以正式地向pypi上传自己的包了。
你需要按照上述的流程,在https://pypi.org/上创建一个账号并在https://pypi.org/manage/account/token/新建token。它与TestPyPI上的账号和token不互通。

使用以下命令将你的包上传到PyPI

python -m twine upload dist/*

等待完成,在https://pypi.org/manage/projects/上查看你的包是否已经上传了。

安装你上传的包

pip install your_package_name

如果你的pip定义了镜像源,那么你的包不一定能够第一时间被同步。清华大学的TUNA镜像站同步速度比较快。

15 Likes

沙发

1 Like

这是怎么触发WAF规则的

2 Likes

大善人认为你正在请求 Workers

1 Like

mark, py thon 库上传

1 Like

进来学习了

我入了poetry的坑 :rofl:

18 Likes

人生苦短,我用python

感谢热佬的干货分享,正想学习这方面的知识,太感谢了

From #dev to 开发调优