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

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

yuyutoo 2025-02-09 14:51 3 浏览 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' 是一个包,不能直接执行。

相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: