2025年3月21日 星期五 甲辰(龙)年 月廿 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 打包自己的库到 PYPI (可通过pip install进行安装)

时间:02-22来源:作者:点击数:16

在我们安装 Python 库的时候,通常我们都是pip install XXX,感觉很酷,经常会想,这个XXX是怎么来的,我们可以自己生成吗?答案当然是可以的。下面我们就来看看如何生成并发布到pypi上使用。

准备工作

  1. 拥有一个PyPI · The Python Package Index的账号
  2. 已经写好能正常使用的库/方法/项目 (可本地调用)

操作步骤

1、创建一个这样的目录结构

  • packaging_tutorial # 该目录名称随便取
  • ├── LICENSE
  • ├── README.md
  • ├── example_pkg # 该目录名称随便取,该目录用于存放我们已经写好能正常使用的库/方法/项目
  • │ └── __init__.py
  • ├── setup.py
  • └── tests

2、编辑example_pkg/__init__.py,写入以下内容

  • name = "example_pkg"

3、编辑setup.py 文件,

  • import os
  • import setuptools
  • # 如果readme文件中有中文,那么这里要指定encoding='utf-8',否则会出现编码错误
  • with open(os.path.join(os.path.dirname(__file__), 'README.rst'), encoding='utf-8') as readme:
  • README = readme.read()
  • # 允许setup.py在任何路径下执行
  • os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
  • setuptools.setup(
  • name="example-pkg-YOUR-USERNAME-HERE", # 库名,需要在pypi中唯一
  • version="0.0.1", # 版本号
  • author="Example Author", # 作者
  • author_email="author@example.com", # 作者邮箱(方便使用者发现问题后联系我们)
  • description="A small example package", # 简介
  • long_description=long_description, # 详细描述(一般会写在README.md中)
  • long_description_content_type="text/markdown", # README.md中描述的语法(一般为markdown)
  • url="https://github.com/pypa/sampleproject", # 库/项目主页,一般我们把项目托管在GitHub,放该项目的GitHub地址即可
  • packages=setuptools.find_packages(), #默认值即可,这个是方便以后我们给库拓展新功能的
  • classifiers=[ # 指定该库依赖的Python版本、license、操作系统之类的
  • "Programming Language :: Python :: 3",
  • "License :: OSI Approved :: MIT License",
  • "Operating System :: OS Independent",
  • ],
  • install_requires=[ # 该库需要的依赖库
  • '你的库依赖的第三方库(也可以指定版本)',
  • # exapmle
  • 'pyautogui',
  • 'Django >= 1.11, != 1.11.1, <= 2',
  • ],
  • python_requires='>=3.6',
  • )

4、创建packaging_tutorial/README.md,向其写入自己对该库的简介、描述、配置等等,下面是一个实例

  • # Example Package
  • =====
  • 登录和注册系统
  • =====
  • ## 这是一个用户登录和注册教学项目
  • ## 这是一个可重用的登录和注册APP
  • ## 该项目教程发布在www.cdsy.xyz
  • ## 简单的使用步骤:
  • 1. 创建虚拟环境
  • 2. 使用pip安装第三方依赖
  • 3. 添加相应的路由
  • 4. 配置settings
  • 5. 运行migrate命令,创建数据库和数据表
  • 6. 链接你的index页面
  • 7. 运行python manage.py runserver启动服务器
  • ## 路由设置:
  • from django.contrib import admin
  • from django.urls import path, include
  • from login import views
  • urlpatterns = [
  • path('admin/', admin.site.urls),
  • path('index/', views.index),
  • path('login/', views.login),
  • path('register/', views.register),
  • path('logout/', views.logout),
  • path('confirm/', views.user_confirm),
  • path('captcha/', include('captcha.urls'))
  • ]
  • ## settings配置:
  • 1. 在INSTALLED_APPS中添加‘login’,'captcha'
  • 2. 默认使用Sqlite数据库
  • 3. LANGUAGE_CODE = 'zh-hans'
  • 4. TIME_ZONE = 'Asia/Shanghai'
  • 5. USE_TZ = False
  • # 邮件服务设置
  • 6. EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  • 7. EMAIL_HOST = 'smtp.sina.com'
  • 8. EMAIL_PORT = 25
  • 9. EMAIL_HOST_USER = 'xxxx@sina.com'
  • 10. EMAIL_HOST_PASSWORD = 'xxxxx'
  • # 注册有效期天数
  • 11. CONFIRM_DAYS = 7

5、创建LICENSE版权申明文件。大多数Django相关的app都基于BSD版权。如果不是发布到正式场合,可以不写。对于每一个创建的库来说 LICENSE 是很重要的,这告诉大家我们的库能用在什么方面(商用?学习之类的)还有免责啊之类的;一般来说我们选择MIT

  • MIT License
  • Copyright (c) [year] [fullname]
  • Permission is hereby granted, free of charge, to any person obtaining a copy
  • of this software and associated documentation files (the "Software"), to deal
  • in the Software without restriction, including without limitation the rights
  • to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  • copies of the Software, and to permit persons to whom the Software is
  • furnished to do so, subject to the following conditions:
  • The above copyright notice and this permission notice shall be included in all
  • copies or substantial portions of the Software.
  • THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  • IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  • FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  • AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  • LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  • OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  • SOFTWARE.

MIT LICENSE 的大概意思是

  • 软件可以随便用,随便改
  • 可以免费,可以收费
  • 软件的源文件里必须有这个许可证文档
  • 我提供这个软件不是为了犯法,你要用它来犯法,那与我无关
  • 你用这个软件犯事了,责任全在你自己,与其他贡献者无关

选择我们自己的LICENSE

6、确保我们已安装最新setuptoolswheeltwine,下面是安装/更新命令

  • python -m pip install --user --upgrade setuptools wheel twine

7、打包我们的库/项目

  • python setup.py sdist bdist_wheel

此时在当前目录我们会看到以下输出:

  • dist/
  • example_pkg_your_username-0.0.1-py3-none-any.whl
  • example_pkg_your_username-0.0.1.tar.gz

8、使用 twine 将打包好的库/项目上传到PYPI(需用到PYPI帐号密码,此时只是上传到PYPI测试服,还不能 pip install 这个库/项目)

  • python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

我们会看到如下界面:

  • Uploading distributions to https://test.pypi.org/legacy/
  • Enter your username: [your username]
  • Enter your password:
  • Uploading example_pkg_your_username-0.0.1-py3-none-any.whl
  • 100%|█████████████████████| 4.65k/4.65k [00:01<00:00, 2.88kB/s]
  • Uploading example_pkg_your_username-0.0.1.tar.gz
  • 100%|█████████████████████| 4.25k/4.25k [00:01<00:00, 3.05kB/s]

上传成功之后,我们可以去PYPI的测试服查看是否上传成功,能上传成功的话就说明肯定也能成功上传到PYPI正式服(附:PYPI测试服地址

PYPI测试服的管理员会不定期删除上边的库,正式投入使用还是得上传到正式服。

若是想测试下上传到测试服的库能否使用,可以使用如下命令

  • python -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-your-username

大致会出现以下:

  • Collecting example-pkg-your-username
  • Downloading https://test-files.pythonhosted.org/packages/.../example-pkg-your-username-0.0.1-py3-none-any.whl
  • Installing collected packages: example-pkg-your-username
  • Successfully installed example-pkg-your-username-0.0.1

9、将库上传到 PYPI正式服

  • twine upload dist/*

参考1

官方传送门

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门