浅析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技术站