浅析python打包工具distutils、setuptools

yizhihongxing

浅析python打包工具distutils、setuptools

在Python中,我们可以使用打包工具来打包我们的Python代码,以便于发布和使用。两个常用的Python打包工具是distutils和setuptools。本文将介绍这两个工具的使用方法及区别。

distutils

distutils是Python自带的打包工具,可以用于打包可以被其他人所使用的Python源代码。在使用时,我们需要在setup.py文件中指定该包的信息。下面是一个简单的setup.py文件示例:

from distutils.core import setup

setup(
      name='my_package',
      version='1.0',
      py_modules=['my_module'],
      )

上述代码表示我们打包的是一个名为my_package的包,包含一个名为my_module的模块。运行以下命令可以将代码打包:

$ python setup.py sdist

此命令将在当前目录下生成一个名为my_package-1.0.tar.gz的压缩文件,压缩文件中包括my_module模块的代码和setup.py文件。

setuptools

setuptools是distutils的增强版,提供了更多的功能。例如,它提供了easy_install工具,可以自动下载包的依赖包,安装后可以立即使用。我们可以使用以下命令来安装setuptools:

$ pip install setuptools

下面是使用setuptools的示例,仍然是打包一个包含一个模块的项目:

from setuptools import setup, find_packages

setup(
      name='my_package',
      version='1.0',
      packages=find_packages(),
      install_requires=[
            'requests',
      ]
      )

上述代码比distutils的示例多了两行,其中find_packages()函数用于寻找项目内所有的python模块,install_requires参数则指定依赖包列表。我们可以使用以下命令来打包代码:

$ python setup.py bdist_wheel

此命令将在当前目录下生成一个名为my_package-1.0-py3-none-any.whl的wheel文件。

区别

尽管这两个工具都可以用于打包Python代码,但是setuptools提供了更多的功能,特别是在处理依赖方面的增强功能。如果你的项目拥有大量的依赖包,尤其是一些不易安装的包,那么你应该使用setuptools来打包项目。

另外,setuptools还支持更多打包类型,例如wheel文件。但是,使用setuptools也可能会导致兼容问题。如果您的代码需要向其他库或系统提供函数或其他机制,则还需要考虑兼容性问题。

示例

以下是一个较为完整的使用setuptools打包项目的示例:

from setuptools import setup, find_packages
from os import path

here = path.abspath(path.dirname(__file__))

with open(path.join(here, 'README.md'), encoding='utf-8') as f:
    long_description = f.read()

setup(
    name='example_package',
    version='0.0.1',
    description='A sample Python project',
    long_description=long_description,
    long_description_content_type='text/markdown',
    url='https://github.com/username/repo',
    author='Author Name',
    author_email='author@example.com',
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'Topic :: Software Development :: Build Tools',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
    ],
    keywords='sample setuptools development',
    packages=find_packages(where='src'),
    package_dir={'': 'src'},
    python_requires='>=3.5, <4',
    install_requires=[
        'numpy',
        'matplotlib',
    ],
    extras_require={
        'dev': ['check-manifest'],
        'test': ['coverage'],
    },
    project_urls={
        'Bug Reports': 'https://github.com/username/repo/issues',
        'Say Thanks!': 'http://saythanks.io/to/example',
        'Source': 'https://github.com/username/repo/',
    },
)

本文的第一个示例使用了distutils和setuptools来介绍不同工具的语法。而此示例则是一个更完整的使用setuptools的Python项目打包示例。可以看到该示例的setup()函数包含了很多参数,其中大多数都是用于构建说明信息,用于构建PyPI上的项目主页及其他元数据。主页、描述、license以及一些关键字都需要在setup()函数中指定。示例还定义了两个可选依赖(extras_require),可以允许用户根据需要选择安装。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析python打包工具distutils、setuptools - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python使用sqlite3时游标使用方法

    在Python中,我们可以使用sqlite3模块来操作SQLite数据库。在使用sqlite3模块时,我们需要使用游标(Cursor)来执行SQL语句。本文将介绍Python中使用sqlite3时游标的使用方法,包括游标的创建、执行语句、获取结果等操作。 创建游标 在Python中,我们可以使用cursor()方法来创建游标。例如: import sqlit…

    python 2023年5月14日
    00
  • 跟老齐学Python之大话题小函数(1)

    “跟老齐学Python之大话题小函数(1)”是一篇介绍Python函数的教程,主要包括函数定义、传递参数、返回值、作用域等内容。以下是教程的完整攻略: 函数定义 在Python中,使用def关键字定义一个函数,如下所示: def function_name(parameters): function_body 其中,function_name是函数的名称,p…

    python 2023年5月30日
    00
  • 基于wxPython的GUI实现输入对话框(2)

    “基于wxPython的GUI实现输入对话框(2)”是一篇关于使用wxPython库实现GUI界面上的输入对话框的教程文章。该文章主要涉及到了各种类和方法的使用详解,下面我会进行详细的解释。 第一部分:wxPython库介绍 wxPython是一个开源的Python扩展库,它利用Python语言提供了一个强大、灵活、可扩展的框架来创建图形用户界面(GUI)。…

    python 2023年6月13日
    00
  • python 数据加密代码

    Python 数据加密代码攻略 在数据传输或储存的过程中,为了保护数据安全,我们需要对敏感数据进行加密。Python 提供了多种加密方式和库,本文将介绍使用 Python 进行数据加密的完整攻略。 1. 对称加密 对称加密是一种加密方式,使用同一把密钥进行加密和解密。常见的对称加密算法有 DES、3DES、AES 等。 1.1 使用 PyCryptodome…

    python 2023年6月2日
    00
  • python format 格式化输出方法

    Python中的字符串格式化是一种用来格式化字符串输出的方法,常见的有“%”格式化和“format()”格式化方法,其中其中“format()”方法是比较推荐使用的,因为它在复杂的场景下比“%”格式化更加清晰易读。 format()格式化 format()方法使用一种简单的占位符,用大括号“{}”指定在哪里插入格式化的值。形式如下: "Hello,…

    python 2023年5月14日
    00
  • python在一个范围内取随机数的简单实例

    首先,我们可以使用Python的内置模块random来生成随机数。可以使用random模块中的randint()方法来在指定范围内生成整数类型的随机数。 下面我们一步步来实现在指定范围内生成随机数的代码实例: 生成一个在[1, 10]范围内的随机数 import random # 使用randint()方法来生成一个在[1, 10]范围内的随机数 numbe…

    python 2023年6月3日
    00
  • 详解Python 如何检查一个变量是否存在

    Python提供了一种简单的方法来检查变量是否存在,可以使用 if 语句和 in 运算符来完成这个任务。 以下是一个基本的示例: if ‘my_variable’ in locals(): print(‘my_variable exists’) 这里使用 locals() 函数来检查当前范围内的局部变量是否存在。如果变量存在,则执行 print() 语句。 …

    python-answer 2023年3月25日
    00
  • Python制作豆瓣图片的爬虫

    下面是详细的攻略: Python制作豆瓣图片的爬虫 在Python中,我们可以使用requests和BeautifulSoup模块实现豆瓣图片的爬虫。本文将手把手教你用Python制作豆瓣图片的爬虫,并提供两个示例说明。 实现过程 在实现豆瓣图片的爬虫的过程中,我们需要模拟浏览器发送请求,并解返回的HTML页面。下面是一个简单的示例代码: import re…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部