百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

python散装笔记——80: 创建 Python 程序包

yuyutoo 2025-02-09 14:51 9 浏览 0 评论

1: 简介

每个软件包都需要一个描述软件包的 setup.py 文件。

下面是一个简单软件包的目录结构:

+-- package_name
| |
| +-- __init__.py
|
+-- setup.py

__init__.py 只包含一行 def foo(): return 100

下面的 setup.py 将定义软件包:

from setuptools import setup

setup(
  name='package_name', # package name
  version='0.1', # version
  description='Package Description', # short description
  url='http://example.com', # package URL
  install_requires=[], # list of packages this package depends on.
  packages=['package_name'], # List of module names that installing this package will provide.
)

virtualenv 是测试软件包安装的好帮手,无需修改其他 Python 环境:

$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
$ python setup.py install
running install
...
Installed .../package_name-0.1-....egg
...
$ python
>>> import package_name
>>> package_name.foo()
100

2: 上传到 PyPI

一旦您的 setup.py 功能完善(见上一节),就可以非常容易地将软件包上传到 PyPI。(本节和下节内容暂不演示)

设置 .pypirc 文件

该文件存储用于验证账户的登录名和密码。它通常保存在你的主目录中。

# .pypirc file

[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password

[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password

使用 twine 上传软件包更安全,因此请确保安装了 twine。

$ pip install twine

注册并上传到 testpypi(可选)

注意:PyPI 不允许覆盖已上传的软件包,因此最好先在专用测试服务器(如 testpypi)上测试你的部署。我们将讨论这一选项。在上传之前,考虑对软件包进行版本控制,例如日历版本控制或语义版本控制。

登录或在 testpypi 创建一个新账户。只有第一次注册时才需要,但多次注册也无妨。

$ python setup.py register -r pypitest

而在软件包的根目录下:

$ twine upload dist/* -r pypitest

现在应该可以通过您的账户访问您的软件包了。

测试

创建一个测试虚拟环境。尝试从 testpypiPyPI 安装你的软件包。

# Using virtualenv
$ mkdir testenv
$ cd testenv
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
\# Test from testpypi
(.virtualenv) pip install --verbose --extra-index-url https://testpypi.python.org/pypi package_name
...
# Or test from PyPI
(.virtualenv) $ pip install package_name
...

(.virtualenv) $ python
Python 3.5.1 (default, Jan 27 2016, 19:16:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import package_name
>>> package_name.foo()
100

如果成功,您的软件包至少是可导入的。在最终上传到 PyPI 之前,您也可以考虑测试一下您的 API。如果你的软件包在测试过程中失败了,不要担心。您仍然可以修复它,重新上传到 testpypi 并再次测试。

注册并上传到 PyPI

确保安装了 twine

$ pip install twine

Either log in, or create a new account at PyPI.

$ python setup.py register -r pypi
$ twine upload dist/*

就是这样!你的软件包已经上线。

如果发现错误,只需上传新版本的软件包即可。

文档

别忘了至少为你的软件包提供一些文档。PyPi 默认使用 reStructuredText 作为格式化语言。

自述文件

如果您的软件包没有大量的文档,请在 README.rst 文件中加入对其他用户有帮助的内容。文件准备好后,还需要另一个文件来告诉 PyPi 显示它。

创建 setup.cfg 文件,并在其中加入这两行:

[metadata]
description-file = README.rst

请注意,如果您尝试将 Markdown 文件放入您的软件包,PyPi 将把它作为一个纯文本文件来读取,不带任何

格式化。

许可

通常情况下,我们非常欢迎在您的软件包中放入一个 LICENSE.txt 文件,其中包含一个开源许可证,以告诉用户他们是否可以在商业项目中使用您的软件包,或者您的代码是否可以使用他们的许可证。

一些许可证的可读性说明见 TL;DR

3: 使软件包可执行

如果你的软件包不仅是一个库,而且还有一段代码,在安装软件包后可以作为展示程序或独立应用程序使用,请将这段代码放到 __main__.py 文件中。

__main__.py 文件放到 package_name 文件夹中。这样,你就可以直接从控制台运行它了:

python -m package_name

如果没有可用的 __main__.py 文件,软件包将无法使用此命令运行,并将打印此错误信息:

python: 没有名为 package_name.__main__ 的模块;'package_name' 是一个包,不能直接执行。

相关推荐

微软Win10/Win11版Copilot上线:支持OpenAI o3推理模型

IT之家4月3日消息,科技媒体WindowsLatest昨日(4月2日)发布博文,报道称Windows10、Windows11新版Copilot应用已摘掉Beta帽...

WinForm 双屏幕应用开发:原理、实现与优化

在当今的软件开发领域,多屏幕显示技术的应用越来越广泛。对于WinForm应用程序来说,能够支持双屏幕显示不仅可以提升用户体验,还能满足一些特定场景下的业务需求,比如在演示、监控或者多任务处理等场景...

推荐一个使用 C# 开发的 Windows10 磁贴美化小工具

...

OpenJDK 8 安装(openjdk 8 windows)

通常OpenJDK8和11都能互相编译和通用。我们建议使用11,但是如果你使用JDK8的话也是没有问题的。建议配置使用OpenJDK,不建议使用OracleJDK,主要是因为版...

基于 Linux 快速部署 OpenConnect VPN 服务(ocserv 实战指南)

一、前言在如今远程办公和内网穿透需求日益增长的背景下,搭建一套安全、稳定、高效的VPN系统显得尤为重要。OpenConnectServer(ocserv)是一个开源、高性能的VPN服务端软件...

巧妙设置让Edge浏览器更好用(edge怎么设置好用)

虽然现在新版本的Edge浏览器已经推出,但是毕竟还处于测试的状态中。而Win10系统里面自带的老版Edge浏览器,却越来越不被人重视。其实我们只需要根据实际情况对老版本的Edge浏览器进行一些简单的设...

WPF做一个漂亮的登录界面(wpf页面设计)

...

微软开源博客工具Open Live Writer更新:多项Bug修复

OpenLiveWriter前身是WindowsLiveWriter,是微软WindowsLive系列软件之一,曾经是博主们非常喜爱的一款所见即所得博文编辑工具,支持离线保存,还支持图像编辑...

基于OpenVINO的在线设计和虚拟试穿 | OPENAIGC大赛企业组优秀作品

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。...

C#开源免费的Windows右键菜单管理工具

...

Windows10或11中隐藏的功能,用它再也不用担心电脑中病毒!

...

Python open函数详解(python open函数源码)

演示环境,操作系统:Win1021H2(64bit);Python解释器:3.8.10。open是Python的一个内置函数,一般用于本地文件的读写操作。用法如下。my_file=open(fi...

Windows 11 安装 Docker Desktop(Windows 11 安装助手 Windows 易升 关系)

...

Windows 11 新版发布:屏幕亮度自适应控制,小组件界面重新设计!

...

世界上最好用的Linux发行版之一,OpenSUSE安装及简单体验

背景之前无意在论坛里看到openSUSE的Linux发行版,被称为世界上最好用的Linux发行版之一(阔怕),一直想体验一下,于是这期做一个安装和简单体验教程吧。...

取消回复欢迎 发表评论: