📜  python中distutils介绍(1)

📅  最后修改于: 2023-12-03 15:34:21.557000             🧑  作者: Mango

Python中distutils介绍

Python中的distutils模块是Python的标准库中的一个模块,用于构建和分发Python模块。本文将介绍distutils的概念、用法和一些实例。

概念

distutils是一个用于构建和分发Python软件包的工具集,其内置于Python中,因此不需要任何其他安装即可使用。它使得开发者可以从源代码构造和分发软件包,而无需担心对各种操作系统和安装场景的适应性。

distutils支持以下功能:

  • 自动化清理、构建和安装Python模块
  • 构建并打包Python软件包,例如源代码、数据文件、文档等
  • 构建并安装C/C++库作为Python扩展
用法
创建setup.py文件

要使用distutils,需要在你的项目根目录下创建一个名为setup.py的文件,其中包含描述你代码如何构建和安装的元数据。

from distutils.core import setup

setup(
    name='example-project',
    version='1.0',
    packages=['example_package'],
    url='https://github.com/yourusername/example_project',
    license='MIT License',
    author='Your Name',
    author_email='your_email@example.com',
    description='An example Python package'
)
  • name:包名
  • version:包的版本号,格式为x.x.x
  • packages:需要打包的python模块
  • url:项目地址
  • license:开源协议
  • author:作者名字
  • author_email:作者邮箱
  • description:包的简单描述

这是一个非常基础的例子,更多的参数可以在Python官方文档中查找。

构建你的项目

使用Python自带的setup工具就可以构建你的项目。

python setup.py sdist

运行此命令会生成一个名为dist的目录,并放置你的源代码的打包产物。其中,*.tar.gz文件是常用的打包文件格式。

安装项目

使用以下命令可以安装你的项目:

python setup.py install

运行此命令会将你的项目安装到Python安装路径中,即可以在其他的Python程序中导入你的代码了。

你还可以添加一些其他的参数,例如指定安装路径:

python setup.py install --install-lib /path/to/your/project
扩展C/C++代码

distutils也可以用来编译和构建C/C++代码作为Python的扩展。

首先,编写一个扩展函数:

// hello.c
#include <Python.h>

static PyObject *hello(PyObject *self, PyObject *args) {
    const char *name;
    if (!PyArg_ParseTuple(args, "s", &name)) {
        return NULL;
    }
    printf("Hello, %s!\n", name);
    Py_RETURN_NONE;
}

static PyMethodDef HelloMethods[] = {
    {"hello",  hello, METH_VARARGS, "Say hello"},
    {NULL, NULL, 0, NULL}
};

static struct PyModuleDef hellomodule = {
    PyModuleDef_HEAD_INIT,
    "hello",   /* name of module */
    NULL, /* module documentation, may be NULL */
    -1,       /* size of per-interpreter state of the module,
                or -1 if the module keeps state in global variables. */
    HelloMethods
};

PyMODINIT_FUNC PyInit_hello(void) {
    return PyModule_Create(&hellomodule);
}

然后添加一个setup.py文件:

from distutils.core import setup, Extension

module1 = Extension('hello', sources=['hello.c'])

setup(name='hello_ext',
      version='1.0',
      description='A hello-world example extension',
      ext_modules=[module1])

最后,运行以下命令构建你的扩展:

python setup.py build_ext --inplace

这将在同一目录下生成一个名为hello.so文件,就是你的Python扩展库。

将项目上传到PyPI

PyPI(Python Package Index)是Python社区常用的软件包托管服务,你可以将你开发的Python软件包发布到PyPI上供其他人使用。

首先,你需要注册一个PyPI账号。然后,使用以下命令安装twine

pip install twine

在安装twine后,运行以下指令即可将你的项目上传到PyPI上:

python setup.py sdist bdist_wheel
twine upload dist/*

现在,其他的Python用户就可以使用以下命令安装并使用你的模块:

pip install example-project
结语

distutils是Python的标准库中的一个模块,用于构建和分发Python模块。在本文中,我们介绍了distutils的概念、用法和一些实例。如果你想分享你的Python模块给其他用户,那么使用distutils就能让你轻松地构建和分发你的Python模块。