使用 pip 发布 Python 程序
写过 Python 程序的小伙伴们都知道,需要 import 个非 Python 自带的软件包时,都要用到 pip 这个程序。平时我们都是用 pip,如果我们写好了一个程序,想让大家都能用的到,那么是不是也可以通过 pip 发布出去呢?
答案当然是可以了,这篇文章我们就来看看如何用 pip 发布一个 python 程序。
1. 环境准备
要用 pip 发布 python 程序,首先当然是要安装 Python 和 pip 这两个软件了,以 Ubuntu 16.04 为例:
$ sudo apt update $ sudo apt install -y python python-pip
CentOS 和 RedHat 因为 RPM 体系需要依赖于 python,更是默认就安装好了。
另外发布 Pypi,还需要安装一个发布工具,twine,以及其所依赖的 setuptools、wheel:
$ sudo pip install --upgrade twine setuptools wheel
好,到这环境就已经就绪了。
2. 注册帐号
pip 上传代码包是最终保存在 https://pypi.org 这个网站上的,所以要用 pip 发布程序,就需要在这个网站上注册一个帐号。
访问该网址进行注册:https://pypi.org/account/register/
注册后还需要进行邮箱验证,流程和普通网站没有任何区别,所以具体步骤就不在这里详细介绍了。
3. 代码结构
要发布 Python 程序,程序的结构必须符合特定的要求,假设要发布的程序名为 example-pkg,基本的目录结构如下:
/example-pkg /example-pkg __init__.py setup.py LICENSE README.md
说一下目录和文件的含义:
- 首先最外层要建立一个和发出程序同名的文件夹:/example-pkg
- 该文件夹下还要再简历一个同名文件夹,用来存放程序代码:/example-pkg/example-pkg
- Python 的老规矩,example-pkg/example-pkg 目录下当然要有一个
__init__.py
文件。 - /example-pkg 目录下要有一个叫 setup.py 的文件,如果下载过 Python 代码包,应该都知道这个文件,需要通过这个文件进行 Python 代码的编译(可能会有依赖的其他代码包或者依赖的 C 文件)和安装。
- LICENSE 文件:这个文件就是用来保存代码所使用的开源许可证。
- README.md:这个是软件行业的惯例了,帮助文档。
对于 setup.py 文件,还有必要好好说说,先贴个例子,下面这个例子中,主要是实现了从 /example-pkg/example-pkg/__init__.py
文件中读取 version 参数,来配置当前软件的版本,并指定了代码包名(name)、作者(author)、邮箱(author_email)、描述信息(long_description、long_description_content_type)、依赖(install_requires),以及哪些文件不会被打包到程序中(exclude_package_data)。
另外需要提醒大家一点,给程序起名字不要带下划线(_),python import 代码包时,是不支持下划线包名的,出现这种情况就比较尴尬,代码装上了,还是用不了。
#!/usr/bin/env python import re import setuptools version = "" with open('example-pkg/__init__.py', 'r') as fd: version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name="example-pkg", version=version, author="example", author_email="author@example.com", description="This is the SDK for example.", long_description=long_description, long_description_content_type="text/markdown", url="http://example.com", install_requires=[ 'requests!=2.9.0', 'lxml>=4.2.3', 'monotonic>=1.5', ], packages=setuptools.find_packages(exclude=("test")), classifiers=( "License :: OSI Approved :: MIT License", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ), exclude_package_data={'': ["example-pkg/test.py", "example-pkg/config.txt"]}, )
4. 上传和检查
一切准备就绪,下面就可以执行打包命令,产生要上传的代码包了:
$ python setup.py sdist bdist_wheel
执行结束后,会产生如下目录和文件:
/example-pkg/dist/ example-pkg-0.0.1-py3-none-any.whl example-pkg-0.0.1.tar.gz
包有了,就差上传了,执行第一步中安装的 twine 命令:
$ twine upload dist/* Uploading distributions to https://upload.pypi.org/legacy/ Enter your username: <your pypi.org username> Enter your password: <your pypi.org password> Uploading example-pkg-0.0.1-py3-none-any.whl 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 45.0k/45.0k [00:01<00:00, 24.0kB/s] Uploading example-pkg-0.0.1.tar.gz 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 43.8k/43.8k [00:00<00:00, 46.2kB/s]
上传完毕!不过这里有一点需要注意,上传新版本后,很可能 pip search
还没法查到版本的更新,这是正常的,我理解是pip search
命令依赖于缓存,所以不会立刻生效。
接下来就让我们下载自己刚刚上传的 python 试试吧:
$ pip install example-pkg $ python >>> import example-pkg >>> example-pkg.name 'example-pkg'
最后再补充一点,上传可能会失败,提示无法上传指定的代码包,此时很大的可能是 pypi 中已经有了相同的代码包,所以建议在上传之前,先搜索一下是否有重名的代码包,选择一个不冲突的名字,再上传。
例如下面这个例子,example-pkg 已经存在了,如果要再上传,那当然会失败,换个名字就解决了。
$ pip search example-pkg example-pkg (0.0.7) - A small example package ......
5. 参考文档
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何更好的做单元测试并用它来提升代码质量(下)
现代化的spring-test使用方式 以下例子可以在javaconfig-spring-test中找到。 在classic-spring-test中演示的单元测试,还是用配置文件的方式,但是从Spring4之后,官方就鼓励使用Java的方式对spring进行配置,而不是用以前那样的xml配置形式了,因此我们基于注解可以来简化单元测试的编写,我们称之为现代化的spring-test方式。 修改单元测试 测试不用继承AbstractJUnit4SpringContextTests,通过注解即可,然后对于bean的配置,可以通过Java配置风格完成 注解 使用RunWith和ContextConfiguration配置即可将一个类声明为支持Spring容器的测试用例。 @RunWith(SpringRunn
- 下一篇
.NET Core部署中你不了解的框架依赖与独立部署
作者:依乐祝原文地址:https://www.cnblogs.com/yilezhu/p/9703460.htmlNET Core项目发布的时候你有没有注意到这两个选项呢?有没有纠结过框架依赖与独立部署到底有什么区别呢?如果有的话那么这篇文章可以参考下!为什么要写这篇文章呢?因为今天同事问我框架依赖与独立部署到底应该选哪个呢?有什么区别。印象中只知道框架依赖发布后文件比独立部署要小很多,然后就是独立部署不占用net core的共享资源,而框架依赖需要与其他net core程序共享net core的一些资源。感觉很模糊,所以查了下资料整理如下,希望对大家有所帮助。 依赖框架的部署 (FDD) 定义 框架依赖的部署:顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19