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

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

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

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

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

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

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

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

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

25人以下免费

目录

python 中如何构建包

python 中如何构建包

构建Python包的步骤包括创建项目目录、编写代码、创建 __init__.py 文件、编写 setup.py 文件、创建 MANIFEST.in 文件、构建包、上传到PyPI等。 其中,编写 setup.py 文件是构建Python包的关键步骤,下面将详细描述。

编写 setup.py 文件是构建Python包的关键步骤,因为它描述了包的元数据和构建信息。setup.py 文件包含包的名称、版本、作者、描述、依赖项等信息。它还可以包含更多复杂的配置,如指定包的数据文件、脚本等。通过 setup.py 文件,开发者可以使用 setuptools 库来构建和分发Python包。

接下来,我们将详细介绍构建Python包的每个步骤。

一、创建项目目录

首先,我们需要创建一个项目目录,其中包含包的所有文件和子目录。假设我们要创建一个名为 mypackage 的包,首先创建一个目录结构如下:

mypackage/

├── mypackage/

│ ├── __init__.py

│ └── module1.py

│ └── module2.py

├── tests/

│ ├── test_module1.py

│ └── test_module2.py

├── setup.py

├── README.md

├── LICENSE

└── MANIFEST.in

二、编写代码

mypackage 目录下编写代码文件。例如,可以在 module1.pymodule2.py 中编写一些示例函数和类:

# module1.py

def hello():

return "Hello from module1"

class Greeter:

def greet(self):

return "Greetings from module1"

module2.py

def world():

return "World from module2"

三、创建 __init__.py 文件

为了将 mypackage 目录标记为Python包,我们需要在其中创建一个空的 __init__.py 文件:

# __init__.py

四、编写 setup.py 文件

setup.py 文件包含包的元数据和构建信息。下面是一个示例 setup.py 文件:

from setuptools import setup, find_packages

setup(

name="mypackage",

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/mypackage",

packages=find_packages(),

classifiers=[

"Programming Language :: Python :: 3",

"License :: OSI Approved :: MIT License",

"Operating System :: OS Independent",

],

python_requires='>=3.6',

)

五、创建 MANIFEST.in 文件

MANIFEST.in 文件用于指定要包含在分发包中的其他文件,例如README、LICENSE等:

include README.md

include LICENSE

六、构建包

使用 setuptoolswheel 构建包。首先,确保安装了这两个库:

pip install setuptools wheel

然后,在项目根目录下运行以下命令来构建包:

python setup.py sdist bdist_wheel

这将生成 dist 目录,其中包含 .tar.gz.whl 格式的分发包。

七、上传到PyPI

要将包上传到PyPI,可以使用 twine 工具。首先,确保安装了 twine

pip install twine

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

twine upload dist/*

八、使用包

上传后,其他用户可以通过 pip 安装你的包:

pip install mypackage

九、示例项目

下面是一个完整的示例项目结构和代码:

mypackage/

├── mypackage/

│ ├── __init__.py

│ └── module1.py

│ └── module2.py

├── tests/

│ ├── test_module1.py

│ └── test_module2.py

├── setup.py

├── README.md

├── LICENSE

└── MANIFEST.in

module1.py 文件:

def hello():

return "Hello from module1"

class Greeter:

def greet(self):

return "Greetings from module1"

module2.py 文件:

def world():

return "World from module2"

__init__.py 文件:

from .module1 import hello, Greeter

from .module2 import world

setup.py 文件:

from setuptools import setup, find_packages

setup(

name="mypackage",

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/mypackage",

packages=find_packages(),

classifiers=[

"Programming Language :: Python :: 3",

"License :: OSI Approved :: MIT License",

"Operating System :: OS Independent",

],

python_requires='>=3.6',

)

MANIFEST.in 文件:

include README.md

include LICENSE

README.md 文件:

# MyPackage

This is a simple example package.

LICENSE 文件:

MIT License

test_module1.py 文件:

import unittest

from mypackage import hello, Greeter

class TestModule1(unittest.TestCase):

def test_hello(self):

self.assertEqual(hello(), "Hello from module1")

def test_greeter(self):

greeter = Greeter()

self.assertEqual(greeter.greet(), "Greetings from module1")

if __name__ == '__main__':

unittest.main()

test_module2.py 文件:

import unittest

from mypackage import world

class TestModule2(unittest.TestCase):

def test_world(self):

self.assertEqual(world(), "World from module2")

if __name__ == '__main__':

unittest.main()

十、测试包

在发布之前,确保包通过所有测试。可以使用 unittest 模块运行测试:

python -m unittest discover -s tests

这将运行 tests 目录下的所有测试文件。

十一、版本控制

使用版本控制系统(如Git)管理包的源代码。确保将 .gitignore 文件添加到项目根目录,以排除不需要的文件:

__pycache__/

*.pyc

*.pyo

*.pyd

*.swp

*.swo

*.bak

*.log

*.tmp

dist/

build/

*.egg-info/

十二、文档编写

编写详细的文档,以便用户了解如何使用你的包。可以使用 Sphinx 工具生成文档:

pip install sphinx

sphinx-quickstart

按照提示配置 Sphinx,然后在 docs 目录下生成文档。

十三、持续集成

配置持续集成(CI)工具,如GitHub Actions、Travis CI、CircleCI等,以自动化测试和发布过程。以下是一个示例GitHub Actions工作流文件:

.github/workflows/python-package.yml 文件:

name: Python package

on: [push]

jobs:

build:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v2

- name: Set up Python

uses: actions/setup-python@v2

with:

python-version: '3.8'

- name: Install dependencies

run: |

python -m pip install --upgrade pip

pip install setuptools wheel twine

pip install -r requirements.txt

- name: Build package

run: |

python setup.py sdist bdist_wheel

- name: Test package

run: |

python -m unittest discover -s tests

- name: Publish package

if: github.ref == 'refs/heads/main'

run: |

python -m pip install --upgrade twine

twine upload dist/*

env:

TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}

TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}

十四、发布新版本

在发布新版本时,更新 setup.py 文件中的版本号,并生成新的分发包:

python setup.py sdist bdist_wheel

twine upload dist/*

十五、总结

构建Python包是一项复杂但有益的任务。通过遵循上述步骤,你可以创建、测试、构建和发布高质量的Python包。记住,编写 setup.py 文件是构建Python包的关键步骤,它描述了包的元数据和构建信息。通过仔细编写和测试代码,确保你的包满足用户需求,并在发布前进行充分的测试。这样,你的包将成为Python社区中有价值的一部分。

相关问答FAQs:

构建Python包的基本步骤是什么?
构建Python包的基本步骤包括创建一个包含必要文件和目录的项目结构,编写代码,准备setup.py文件以定义包的元数据和依赖关系,以及使用命令行工具如setuptools进行打包和分发。项目结构通常包括一个主目录、子包、模块文件以及README文件等。

如何在Python包中管理依赖关系?
在Python包中管理依赖关系通常通过在setup.py文件中列出所需的库和版本来实现。此外,可以使用requirements.txt文件来详细列出开发和生产环境所需的依赖。使用虚拟环境(如venvconda)可以确保依赖关系的隔离,避免与其他项目产生冲突。

如何发布我的Python包到PyPI?
要将Python包发布到Python Package Index(PyPI),需要确保您的包符合PyPI的要求。完成打包后,可以使用twine工具上传包。具体步骤包括创建一个PyPI账户,生成API令牌,使用twine upload命令上传打包文件,最后在PyPI上检查包是否成功发布。

相关文章