通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python如何制作安装包

python如何制作安装包

制作Python安装包的步骤包括创建项目结构、编写setup.py文件、生成分发包、将包上传到PyPI。我们将详细介绍如何创建和发布一个Python安装包。

一、创建项目结构

首先,建立一个项目目录,并在其中创建必要的文件和子目录。假设我们要创建一个名为example_package的包,项目结构可以如下:

example_package/

├── example_package/

│ ├── __init__.py

│ ├── module1.py

│ └── module2.py

├── tests/

│ ├── __init__.py

│ └── test_module1.py

├── README.md

├── setup.py

└── requirements.txt

  • example_package/目录:这是你的包的主目录,包含实际的Python模块和子包。
  • tests/目录:包含测试代码。
  • README.md文件:项目的描述文件。
  • setup.py文件:用于定义包的元数据和构建配置。
  • requirements.txt文件:列出包的依赖项。

二、编写setup.py文件

setup.py文件是Python包的核心配置文件,用于定义包的元数据、依赖项以及其他安装信息。以下是一个简单的setup.py示例:

from setuptools import setup, find_packages

setup(

name='example_package',

version='0.1.0',

author='Your Name',

author_email='your.email@example.com',

description='A simple example package',

long_description=open('README.md').read(),

long_description_content_type='text/markdown',

url='https://github.com/yourusername/example_package',

packages=find_packages(),

classifiers=[

'Programming Language :: Python :: 3',

'License :: OSI Approved :: MIT License',

'Operating System :: OS Independent',

],

python_requires='>=3.6',

install_requires=[

# List your package dependencies here

'requests',

],

)

三、生成分发包

接下来,我们需要生成分发包,这可以通过setuptoolswheel来完成。首先,确保你已经安装了这些工具:

pip install setuptools wheel

然后,在项目根目录下运行以下命令生成源分发包和已编译的分发包:

python setup.py sdist bdist_wheel

这将在项目根目录下生成dist/目录,包含.tar.gz.whl文件。

四、将包上传到PyPI

为了将包发布到Python Package Index (PyPI),你需要注册一个PyPI账户,并使用twine工具来上传包。首先,安装twine

pip install twine

然后,使用以下命令将包上传到PyPI:

twine upload dist/*

五、示例代码

创建项目结构部分已经展示了项目的目录结构,下面是示例代码的详细内容:

  1. example_package/__init__.py

# This is an empty file to indicate that this directory is a package

  1. example_package/module1.py

def hello():

return "Hello, World!"

  1. example_package/module2.py

def add(a, b):

return a + b

  1. tests/__init__.py

# This is an empty file to indicate that this directory is a package

  1. tests/test_module1.py

import unittest

from example_package import module1

class TestModule1(unittest.TestCase):

def test_hello(self):

self.assertEqual(module1.hello(), "Hello, World!")

if __name__ == '__main__':

unittest.main()

  1. README.md

# Example Package

This is a simple example package.

六、详细描述setup.py文件

setup.py文件的详细解释

  • name: 包的名称。
  • version: 包的版本号。
  • author: 包的作者。
  • author_email: 作者的电子邮件地址。
  • description: 包的简短描述。
  • long_description: 包的详细描述,通常从README.md中读取。
  • long_description_content_type: 长描述的内容类型(例如text/markdown)。
  • url: 包的项目主页URL。
  • packages: 由find_packages()自动查找所有子包。
  • classifiers: 一系列分类标签,描述包的兼容性和用途。
  • python_requires: 指定包所需的Python版本。
  • install_requires: 列出包的依赖项。

七、测试和验证包

在发布之前,确保包能够在本地环境中正确安装和运行。可以使用以下命令安装生成的分发包:

pip install dist/example_package-0.1.0-py3-none-any.whl

然后在Python环境中测试包的功能:

from example_package import module1, module2

print(module1.hello()) # 输出: Hello, World!

print(module2.add(3, 4)) # 输出: 7

八、包的版本管理

在开发和发布过程中,包的版本管理至关重要。通常采用语义化版本控制(Semantic Versioning),即MAJOR.MINOR.PATCH格式:

  • MAJOR: 主要版本,当你做了不兼容的API修改。
  • MINOR: 次要版本,当你做了向下兼容的功能性新增。
  • PATCH: 补丁版本,当你做了向下兼容的问题修正。

每次发布新版本时,确保更新setup.py中的版本号,并记录在项目的CHANGELOG中。

九、包的依赖管理

setup.pyinstall_requires字段中列出包的依赖项,例如:

install_requires=[

'requests>=2.20.0',

'numpy>=1.18.0',

]

为了确保依赖项的版本兼容性,可以使用piprequirements.txt文件来管理开发和生产环境的依赖项。创建一个requirements.txt文件,列出所有依赖项及其版本:

requests>=2.20.0

numpy>=1.18.0

十、打包工具和自动化发布

为了简化打包和发布流程,可以使用一些自动化工具,例如toxGitHub Actions

使用tox进行自动化测试

在项目根目录下创建一个tox.ini文件,定义测试环境和依赖项:

[tox]

envlist = py36, py37, py38, py39

[testenv]

deps =

pytest

-rrequirements.txt

commands =

pytest

运行tox命令,自动在不同Python版本的虚拟环境中运行测试:

tox

使用GitHub Actions进行自动化发布

在项目的.github/workflows/目录下创建一个python-publish.yml文件,定义发布工作流:

name: Publish Python Package

on:

release:

types: [created]

jobs:

publish:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- name: Set up Python

uses: actions/setup-python@v2

with:

python-version: '3.x'

- name: Install dependencies

run: |

python -m pip install --upgrade pip

pip install setuptools wheel twine

- name: Build and publish

env:

TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}

TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}

run: |

python setup.py sdist bdist_wheel

twine upload dist/*

在GitHub项目的设置中添加TWINE_USERNAMETWINE_PASSWORD机密,以便GitHub Actions能够访问PyPI账号。

十一、包的文档和示例

编写包的文档

良好的文档可以帮助用户了解包的功能和使用方法。在项目根目录下创建一个docs/目录,包含文档文件。可以使用Sphinx工具生成文档:

pip install sphinx

sphinx-quickstart

然后编写文档并生成HTML文件:

make html

将生成的HTML文件放在docs/目录中,并在README.md中添加链接。

编写示例代码

在项目根目录下创建一个examples/目录,包含使用包的示例代码。确保示例代码清晰、易懂,并展示包的主要功能。

十二、包的维护和更新

发布后,持续维护和更新包以修复bug、添加新功能并改进现有功能。

接收用户反馈

通过GitHub Issues或其他渠道接收用户反馈,及时响应并解决问题。

发布更新版本

每次发布新版本时,确保更新setup.py中的版本号,并记录在CHANGELOG中。按照语义化版本控制的规则更新版本号。

改进文档和示例

根据用户反馈和新功能,持续改进文档和示例代码,确保用户能够方便地使用包。

通过以上步骤,您可以创建、发布并维护一个Python安装包。希望这些信息对您有所帮助。

相关问答FAQs:

如何使用Python创建可分发的安装包?
在Python中,可以通过使用setuptools库来创建可分发的安装包。首先,需要在项目根目录下创建一个setup.py文件,里面包含了包的基本信息,如名称、版本、作者等。可以使用命令python setup.py sdist生成源代码分发包,或者使用python setup.py bdist_wheel生成wheel格式的包。

创建安装包时需要注意哪些文件和目录结构?
一个标准的Python包结构通常包括setup.pyREADME.mdLICENSE、以及源代码目录(通常命名为src或与包名相同)。setup.py文件中需要定义包的元数据和依赖项,确保其他开发者能够轻松安装和使用你的包。

如何在不同操作系统上安装Python制作的安装包?
Python安装包通常使用pip进行安装。用户在命令行中输入pip install package_name即可安装。如果使用的是wheel格式的包,确保安装了pip和wheel支持。对于Windows、macOS和Linux等不同操作系统,pip的安装命令是相同的,但可能需要根据系统环境配置Python和pip的路径。

相关文章