浅析python打包工具distutils、setuptools

浅析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模块对Redis数据库的连接与使用讲解

    Python模块对Redis数据库的连接与使用讲解 Redis是一种高性能的NoSQL数据库,具有快速、可扩展和灵活的特点。Python提供了redis模块,可以方便地连接Redis数据库并进行各种操作,包括数据存储、读取、删除以及其他数据结构的操作。 安装redis模块 在使用redis模块之前,需要先进行安装。可以使用pip命令进行安装,如下所示: pi…

    python 2023年5月14日
    00
  • python批量解压zip文件的方法

    下面是详细的讲解: 标题 首先,在撰写本文的时候,为了更好的呈现代码,我们应该添加代码块、标题等元素来进行标识。 代码块 在Markdown中插入代码块,可以使用三个反引号或者四个空格 + 相应的编程语言。 import zipfile import os # 解压zip文件 def unzip_file(zip_src, dst_dir): r = zip…

    python 2023年6月3日
    00
  • 使用Pyinstaller的最新踩坑实战记录

    使用Pyinstaller将Python脚本打包成独立的可执行程序,是Python开发者常用的一种方式。不过在实际使用过程中,可能会遇到一些问题和踩坑的情况。本文就是针对这些问题的解决方案进行一个完整的攻略。 安装Pyinstaller 首先,需要安装Pyinstaller。如果已经安装了Python,可以通过pip来安装Pyinstaller: pip i…

    python 2023年5月13日
    00
  • python 多线程中join()的作用

    当我们在 Python 中使用多线程时,join() 是一个常用的方法。它可以让某个线程等待其他线程完成,直到其他线程全部完成后才能继续执行后面的代码。在本攻略中,我将详细讲解 join() 的作用以及如何在 Python 多线程中使用它。 join() 方法的作用 被调用的线程在执行 join() 方法后,会暂时停止执行直到其他线程全部完成后才会继续执行。…

    python 2023年5月18日
    00
  • Python中encode()方法的使用简介

    Python中encode()方法的使用简介 在Python中,字符串是一类使用特定编码的字符序列。当我们需要在不同编码之间进行转换时,可以使用Python的encode()和decode()方法。本文将重点介绍encode()方法的使用。 encode()方法 encode()是Python字符串对象的方法,它用于将字符串编码为指定字符集的字节序列。它的基…

    python 2023年5月31日
    00
  • 关于python pycharm中输出的内容不全的解决办法

    关于Python PyCharm中输出的内容不全的解决办法 为什么会出现输出内容不全的情况? 在Python PyCharm中,当输出的数据量过大时,交互式窗口默认只会显示一部分内容,而不会显示全部内容。这是因为为了提高交互式窗口的响应速度和稳定性,PyCharm采用了缓冲输出的方式,将输出内容保存在缓存中,而不是直接一次性输出。 如何解决输出内容不全的问题…

    python 2023年6月5日
    00
  • Pycharm最全报错的原因与解决方法总结(推荐!)

    PyCharm最全报错的原因与解决方法总结 PyCharm是一款非常流行的Python集成开发环境(IDE),它提供了许多有用功能,例如代码自动完成、调试、版本控制等等。然而有时候我们在使用PyCharm时会遇到各种各样的错误,这些错误可能会让我们感到困惑。本攻略将提供PyCharm最全报错的原因与解决方法总结,帮助您更好地使用PyCharm。 PyChar…

    python 2023年5月13日
    00
  • python自动化测试之从命令行运行测试用例with verbosity

    下面是python自动化测试从命令行运行测试用例with verbosity的完整攻略: 1. 创建测试用例 首先,我们需要创建python的测试用例文件,用于测试代码的正确性。示例代码如下: # test_sample.py def test_addition(): assert 1 + 1 == 2 def test_subtraction(): ass…

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