Maison  >  Article  >  développement back-end  >  Une brève analyse des outils d'empaquetage Python distutils et setuptools

Une brève analyse des outils d'empaquetage Python distutils et setuptools

不言
不言original
2018-04-20 14:16:022564parcourir

Les packages Python sont très courants dans le développement. La routine d'utilisation générale consiste à créer un package de module Python avec toutes les fonctions, à empaqueter le module, puis à le publier, à l'installer et à l'utiliser. Cet article vous présente les connaissances pertinentes sur les outils d'empaquetage python distutils et setuptools. Les amis intéressés devraient y jeter un œil

Il existe de nombreuses façons d'installer des packages en python :

  1. <.>Paquet source : python setup.py install

  2. Installation en ligne : nom du package d'installation pip (linux) / nom du package easy_install (fenêtre)

Les packages Python sont très courants dans le développement. La routine d'utilisation générale consiste à créer un package de module Python avec toutes les fonctions, à empaqueter le module, puis à le publier, à l'installer et à l'utiliser. L'empaquetage et l'installation de packages sont les tâches les plus courantes. Au cours de mes études, j'ai rencontré deux outils packagés, distutils et setuptools, j'ai pris des notes après mes études.

distutils

distutils fait partie de la bibliothèque standard python Le but de cette bibliothèque est de fournir aux développeurs une méthode d'empaquetage pratique Provide. utilisateurs avec des méthodes d'installation pratiques. Après avoir développé notre propre module, utilisez le package setup.py de distutils.

1. Complétez la fonction python

hello.py


def hello_fun():
 print "i say hello to you"


2. Créez le fichier setup.py

setup.py


from distutils.core import setup
setup(
 name="hello_module",
 version="1.0",
 author="ljk",
 author_email="wilber@sh.com",
 py_modules=[&#39;hello&#39;],
)


3. Exécutez la commande d'emballage

<img src="https://img.php.cn/upload/article/000/153/291/c9ec895b33001f9a73ccf3328f67de41-1.png" alt="">

Vérifiez à nouveau qu'un dossier dist est automatiquement généré dans le répertoire courant. Il y a un package compressé dans le dossier qui est notre fichier cible. Il existe également un fichier d'enregistrement MANIFEST.

4. Installez le module

hello_module-1.0.tar.gz est le module python généré . Basculez vers mon environnement virtuel python et installez le module.

Utilisez

pour installer le module. Comme le montre le chemin, le module est installé sur le chemin spécifié de la bibliothèque standard. python setup.py install

5. Utilisation des modules

Après avoir installé le module, importez le module dans l'environnement interactif python. . Le module est le fichier hello.py, qui fait référence à la fonction hello_fun() dans le fichier hello.py.

setuptools

setuptools est une version améliorée de distutils. setuptools a une fonction Entry_points qui est très pratique, similaire au démarrage d'un service sous Linux. Par exemple, Firefox peut démarrer le navigateur Firefox dans la ligne de commande Linux.

Vérifiez d'abord que le chemin de la commande n'a aucun effet avant l'installation.

1. Créez un package de fonctions

Créez un dossier demo et créez get_path dans le dossier . py et __init__.py deux fichiers. get_path.py est la fonction fonction et __init__.py est le fichier d'identification du package.

get_path.py


import os
def fun():
 print "i am in the path:"
 print os.getcwd()


2. Configurez le fichier setup.py

Créez le fichier setup.py et remplissez les informations d'emballage nécessaires.

setup.py


#-*- encoding: UTF-8 -*-
from setuptools import setup
setup(
 name = "demo",    # 包名
 version = "0.1",    # 版本信息
 packages = [&#39;demo&#39;],   # 要打包的项目文件夹
 include_package_data=True, # 自动打包文件夹内所有数据
 zip_safe=True,    # 设定项目包为安全,不用每次都检测其安全性
 install_requires = [   # 安装依赖的其他包(测试数据)
 &#39;docutils>=0.3&#39;,
 &#39;requests&#39;,
 ],
 # 设置程序的入口为path
 # 安装后,命令行执行path相当于调用get_path.py中的fun方法
 entry_points={
  &#39;console_scripts&#39;:[
   &#39;path = demo.get_path:fun&#39;
          ]
 },
)
<br data-filtered="filtered"><br data-filtered="filtered">


Écrivez toutes les dépendances requises par le module dans la configuration. adresse à télécharger lors de l'installation. Cette méthode simplifie le processus d’installation lors de son utilisation, mais elle n’est pas suffisante. La meilleure façon est d'utiliser le téléchargement automatique de pip.

3. Emballage

Après l'emballage, il y en aura deux autres. dossiers , respectivement demo.egg-info et dist. demo.egg-info est les informations d'installation nécessaires et le package compressé dans dist est le package d'installation.

 查看dist/demo-0.1.tar.gz解压之后的文件。

四、安装包

五、使用包

安装之后在命令行中直接输入path,回车能够看到调用了get_path.py中的函数fun(),输出字符串。

同时也可以导入使用。

 setuptools的进阶使用

上面使用setuptools时只是简单的用一个配置文件setup.py就完成了打包信息填写。在真实的开发环境中,往往是多个文件配合。以openstack的打包为例。openstack中引入了Pbr的管理工具。

pbr是setuptools的辅助工具,最初为openstack开发,基于d2to1。Pbr会读取和过滤setup.cfg中的内容,然后将解析后的数据提供给setup.py作为参数。

setup.cfg提供setup.py的默认参数,同时易于修改。Setup.py先解析setup.cfg文件,然后执行相关命令。包括以下功能:

1、从git中获取Version,AUTHORS和ChangeLog信息

2、SphinxAutodoc。pbr会扫描project,找到所有模块,生成stubfiles

3、Requirements。读取requirements.txt文件,生成setup函数需要依赖包

4、long_description。从README.rst、README.txt或者READMEfile中生成long_description参数

Pbr的文件很简单,如下。配置之后会自动寻找目录下的setup.cfg文件,解析文件参数给setup.py使用。

setup.py


from setuptools import setup
setuptools.setup(
setup_requires=[&#39;pbr&#39;],
pbr=True)
setup.cfg

[metadata]
name= keystone
version= 2015.2
summary= OpenStack Identity
description-file=
README.rst
author= OpenStack
author-email= openstack-dev@lists.openstack.org
home-page= http://www.openstack.org/
classifier=
Environment:: OpenStack
IntendedAudience :: Information Technology
IntendedAudience :: System Administrators
License:: OSI Approved :: Apache Software License
OperatingSystem :: POSIX :: Linux
ProgrammingLanguage :: Python
ProgrammingLanguage :: Python :: 2
ProgrammingLanguage :: Python :: 2.7
[files]
packages=
keystone
[global]
setup-hooks=
pbr.hooks.setup_hook
[egg_info]
tag_build=
tag_date= 0
tag_svn_revision= 0
[build_sphinx]
all_files= 1
build-dir= doc/build
source-dir= doc/source
[compile_catalog]
directory= keystone/locale
domain= keystone




Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn