测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Python如何打包即setuptools模块的用法
收藏本文
作者:redrose2100 类别: 日期:2022-05-11 03:18:22 阅读:1091 次 消耗积分:0 分
[TOC] # 1 setuptools 安装,执行如下命令即可: ```bash pip install setuptools ``` 如下表示已经安装ok ```bash (PythonBaseEnv) G:\study\pkg_01>pip install --upgrade setuptools Collecting setuptools Downloading setuptools-49.2.1-py3-none-any.whl (789 kB) |████████████████████████████████| 789 kB 273 kB/s Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 49.2.0.post20200714 Uninstalling setuptools-49.2.0.post20200714: Successfully uninstalled setuptools-49.2.0.post20200714 Successfully installed setuptools-49.2.1 ``` # 2 将最简单的pkg_01 的包打包为.tar.gz的源码包 * (1) 创建如下文件目录 ```bash pkg_01 |----pkg_01 | |----__init__.py | |----math | |----__init__.py | |----common.py |----setup.py ``` * (2) 在setup.py文件中编写如下代码: ```python from setuptools import setup, find_packages setup( name="pkg_01", version="0.0.1", package=find_packages(), ) ``` * (3) 在 pkg_01.math.common.py中写一个加法的函数 ```pyhton def add(a,b): return (a+b) ``` * (4) 在cmd或者pycharm的终端中切换到pkg_01的根目录中,然后执行如下命令即可打包一个最简单的.tar.gz包 ```bash python setup.py sdist --format=gztar ``` * (5) 在cmd或者pycharm的终端中继续执行如下命令对我们上面打的包进行安装 ```bash pip install dist/pkg_01-0.0.1.tar.gz ``` * (6) 进入python交互式环境中,对上面的安装的pkg_01的包进行测试,如下,表示pkg_01已经安装ok,并且add方法功能也正常 ```bash (PythonBaseEnv) G:\study\pkg_01>python Python 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from pkg_01.math.common import add >>> a=add(100,200) >>> a 300 >>> ``` * (7)源码包一般常用的就是.tar.gz和.zip包 # 3 将上述最简单的pkg_01打包为windows标砖软件msi格式 * (1) 在cmd或者pycharm的终端中执行如下命令: ```bash python setup bdist --format=msi ``` 执行结果如下: ```bash (PythonBaseEnv) G:\study\pkg_01>python setup.py bdist --format=msi D:\Miniconda\envs\PythonBaseEnv\lib\distutils\dist.py:274: UserWarning: Unknown distribution option: 'package' warnings.warn(msg) running bdist running bdist_msi running build installing to build\bdist.win-amd64\msi running install_egg_info running egg_info writing pkg_01.egg-info\PKG-INFO writing dependency_links to pkg_01.egg-info\dependency_links.txt writing top-level names to pkg_01.egg-info\top_level.txt reading manifest file 'pkg_01.egg-info\SOURCES.txt' writing manifest file 'pkg_01.egg-info\SOURCES.txt' Copying pkg_01.egg-info to build\bdist.win-amd64\msi\Lib\site-packages\pkg_01-0.0.1-py3.8.egg-info running install_scripts removing 'build\bdist.win-amd64\msi' (and everything under it) ``` * (2)执行如下命令将已经安装的pkg_01的包卸载掉 ```bash pip uninstall pkg_01 ``` * (3) 找打dist目录下生成的pkg_01-0.0.1.win-amd64.msi软件,双击执行 * (4) 然后选择“install for all users”选项,点击“next” * (5) 继续选择“next”,然后点击“finish”,完成安装 * (6) 在cmd中,使用系统中的pip执行 pip list 发现pkg_01包已经安装上去了 # 4 将pkg_01包打包为rpm包 * (1) 首先将pkg_01的源码上传至linux,在windows上是无法打包rpm包的 * (2) 在linux上首先执行pip list,确保当前pkg_01在linux上是没有安装 ```bash (base) [root@redrose2100 pkg_01]# pwd /opt/pkg_01 (base) [root@redrose2100 pkg_01]# pip list Package Version ---------------------- ------------------- certifi 2020.4.5.1 cffi 1.14.0 chardet 3.0.4 conda 4.8.3 conda-package-handling 1.7.0 cryptography 2.9.2 idna 2.9 pip 20.0.2 pycosat 0.6.3 pycparser 2.20 pyOpenSSL 19.1.0 PySocks 1.7.1 requests 2.23.0 ruamel-yaml 0.15.87 setuptools 46.4.0.post20200518 six 1.14.0 tqdm 4.46.0 urllib3 1.25.8 wheel 0.34.2 (base) [root@redrose2100 pkg_01]# ``` * (3) 进入到pkg_01目录下,执行如下命令将pkg_01打包为rpm包 ```bash python setup.py bdist --format=rpm ``` 则会在dist目录下生成如下三个文件,两个rpm和一个tar.gz ```bash (base) [root@redrose2100 pkg_01]# ls dist/ pkg_01-0.0.1-1.noarch.rpm pkg_01-0.0.1-1.src.rpm pkg_01-0.0.1.tar.gz ``` * (4) 然后可以安装pkg_01-0.0.1-1.noarch.rpm包 ```bash rpm -ivh dist/pkg_01-0.0.1-1.noarch.rpm(base) [root@redrose2100 pkg_01]# rpm -ivh dist/pkg_01-0.0.1-1.noarch.rpm Preparing... ################################# [100%] Updating / installing... 1:pkg_01-0.0.1-1 ################################# [100%] ``` * (5) 再次执行pip list,发现此时pkg-01已经安装ok了 ```bash (base) [root@redrose2100 pkg_01]# pip list Package Version ---------------------- ------------------- certifi 2020.4.5.1 cffi 1.14.0 chardet 3.0.4 conda 4.8.3 conda-package-handling 1.7.0 cryptography 2.9.2 idna 2.9 pip 20.0.2 pkg-01 0.0.1 pycosat 0.6.3 pycparser 2.20 pyOpenSSL 19.1.0 PySocks 1.7.1 requests 2.23.0 ruamel-yaml 0.15.87 setuptools 46.4.0.post20200518 six 1.14.0 tqdm 4.46.0 urllib3 1.25.8 wheel 0.34.2 (base) [root@redrose2100 pkg_01]# ``` # 5 打包方式常用的基本就上面集中,下面重点就是详细配置setup.py文件了 |名称|含义| |---|:---| |name|包的名称| |version|软件包的版本号| |description|软件包的描述| |long_description|软件包的详细描述| |long_description_context_type|软件包详细描述的类型,比如text/markdown| |author|软件包的作者| |author_email|软件包的作者的邮件地址| |maintainer|当前维护者| |maintainer_email|当前维护者的电子邮箱| |url|指定软件包主页的url| |download_url|指定要下载软件包的url| |package|指定setuptools将操作的软件包| |py_modules|指定setuptools将操作的模块| |scripts|用于呀构建和安装的独立脚本文件| |ext_package|软件包提供的扩展的基本软件包| |ext_module|指定要构建的python扩展列表的实例列表| |classifiers|描述程序包类别的字符串列表| |distclass|要使用的子类| |script_name|用于是定setup.py脚本的名称,默认为 sys.argv[0]| |script_args|用于指定setup.py脚本的参数列表| |options|用于给setup.py脚本提供的默认的options| |license|指定软件包的约束协议| |keywords|用于描述元数据的字符串列表或者逗号隔开的字符串| |platform|字符串列表或者逗号隔开的字符串,表示软件支持的平台| |cmdclass|字典提供命令名到Command子类的映射| |data_files|指定要分发的文件列表| |package_dir|提供程序包到目录名称的映射| |install_requires|安装依赖| |include_package_data|如果设置为True,setuptools则表示将在MANIFEST.in文件指定的包目录中自动包含找到的所有数据文件| |exclude_package_data|字典将包名称映射到应从包目录中排除的全局模式列表。您可以使用它来修剪包含的所有多余文件include_package_data| |package_data|包数据文件| |entry_points|字典将入口点组名称映射到定义入口点的字符串或字符串列表。入口点用于支持动态发现项目提供的服务或插件| |python_requires|与Python版本的版本说明符(在PEP 440中定义)相对应的字符串| |namespace_packages|命名项目的“命名空间包”的字符串列表。名称空间包是可以拆分为多个项目发行版的包| # 6 将pkg_01包继续丰富,最后上传至github以及pypi上 * (1) 在工程根目录新建一个README.rst文件,文件内容比如如下:采用markdown语法 ```bash #### 功能:用于演示一个简单打包流程以及上传pypi流程的包 ``` * (2) 将代码包上传至github:https://github.com/redrose2100/pkg_01 * (3) 将setup.py文件丰富为如下内容: ```bash from setuptools import setup, find_packages setup( name="pkg_01", version="0.0.1", descriptions=("used to demo distribute python package"), package=find_packages(), author="redrose2100", author_email="hitredrose@163.com", license="GPLv3", url="https://github.com/redrose2100/pkg_01", install_requires=[] ) ``` * (4) 在pypi上注册账号,并邮件激活 * (5) windows在C:\Users\Administrator 目录下创建 .pypirc文件,内容为: ```bash [distutils] index-servers =pypi [pypi] username: 用户名 password: 密码 ``` * (6) 使用如下命令安装twine ```bash pip install twine ``` * (7) 执行如下命令将打的包上传 ```bash twine upload dist/* ``` 执行结果如下: ```bash (PythonBaseEnv) G:\study\pkg_01>twine upload dist/* Uploading distributions to https://upload.pypi.org/legacy/ Uploading pkg_01-0.0.1.tar.gz 100%|██████████████████████████████████████████████████████████████████████████████████ 100%|██████████████████████████████████████████████████████████████████████████████████ ██████████████████████████████████████████████| 3.62k/3.62k [00:04<00:00, 826B/s] View at: https://pypi.org/project/pkg-01/0.0.1/ (PythonBaseEnv) G:\study\pkg_01> ``` 打开浏览器 输入 https://pypi.org/project/pkg-01/0.0.1/ 既可以看到发布的包了
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/149
上一篇:
Python如何处理配置文件即configparser模块的用法
下一篇:
UnitTest自动化测试框架基本用例组织形式
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件