J'ai fait des scripts Python pour des tâches simples au travail et je n'ai jamais vraiment pris la peine de les empaqueter pour que les autres les utilisent. Maintenant, j'ai été chargé de créer un wrapper Python pour une API REST. Je n'ai absolument aucune idée de comment commencer et j'ai besoin d'aide.
Ce que j'ai:
(Je veux juste être aussi précis que possible) J'ai le virtualenv prêt, il est également dans github , le fichier .gitignore pour python est là aussi, plus, la bibliothèque de requêtes pour interagir avec l'API REST. C'est ça.
Voici l'arborescence de répertoires actuelle
.
├── bin
│ └── /the usual stuff/
├── include
│ └── /the usual stuff/
├── lib
│ └── python2.7
│ └── /the usual stuff/
├── local
│ └── /the usual stuff/
└── README.md
27 directories, 280 files
Je ne sais même pas où placer les fichiers .py, si j'en crée un.
Ce que je voulais faire:
Rendre un module python installable avec "pip install ..."
Si possible, je veux un processus général étape par étape sur l'écriture de modules Python.
la source
Réponses:
Un module est un fichier contenant des définitions et des instructions Python. Le nom de fichier est le nom du module avec le suffixe
.py
créer
hello.py
puis écrire la fonction suivante comme son contenu:Ensuite, vous pouvez importer
hello
:Pour regrouper de nombreux
.py
fichiers, placez-les dans un dossier. Tout dossier avec un__init__.py
est considéré comme un module par python et vous pouvez les appeler un packageVous pouvez continuer avec l'instruction d'importation sur votre module de la manière habituelle.
Pour plus d'informations, voir 6.4. Forfaits .
la source
Python 3 - MISE À JOUR 18 novembre 2015
J'ai trouvé la réponse acceptée utile, mais j'ai souhaité développer plusieurs points au profit des autres en fonction de mes propres expériences.
Module: Un module est un fichier contenant des définitions et des instructions Python. Le nom de fichier est le nom du module avec le suffixe .py ajouté.
Exemple de module : Supposons que nous ayons un seul script python dans le répertoire courant, ici je l'appelle mymodule.py
Le fichier mymodule.py contient le code suivant:
Si nous exécutons l'interpréteur python3 à partir du répertoire actuel, nous pouvons importer et exécuter la fonction myfunc des différentes manières suivantes (vous choisirez généralement l'une des options suivantes):
Ok, donc c'était assez facile.
Supposons maintenant que vous avez besoin de placer ce module dans son propre dossier dédié pour fournir un espace de noms de module, au lieu de simplement l'exécuter ad-hoc à partir du répertoire de travail actuel. C'est là qu'il vaut la peine d'expliquer le concept d'un package .
Package : Les packages sont un moyen de structurer l'espace de noms des modules de Python en utilisant des «noms de modules en pointillés». Par exemple, le nom de module AB désigne un sous-module nommé B dans un package nommé A. Tout comme l'utilisation de modules évite aux auteurs de différents modules d'avoir à se soucier des noms de variables globaux les uns des autres, l'utilisation de noms de modules en pointillés sauve les auteurs des packages multi-modules comme NumPy ou la bibliothèque d'imagerie Python d'avoir à se soucier des noms des modules des autres.
Exemple de package : supposons maintenant que nous avons le dossier et les fichiers suivants. Ici, mymodule.py est identique à avant et __init__.py est un fichier vide:
Les fichiers __init__.py sont requis pour que Python traite les répertoires comme contenant des packages. Pour plus d'informations, veuillez consulter le lien vers la documentation des modules fourni plus loin.
Notre répertoire de travail actuel est un niveau au-dessus du dossier ordinaire appelé mypackage
Si nous exécutons maintenant l'interpréteur python3, nous pouvons importer et exécuter le module mymodule.py contenant la fonction requise myfunc des différentes manières suivantes (vous devriez généralement choisir l'une des options suivantes):
En supposant que Python 3, il existe une excellente documentation sur: Modules
En termes de conventions de dénomination pour les packages et les modules, les directives générales sont données dans PEP-0008 - veuillez consulter Noms des packages et des modules
Les modules doivent avoir des noms courts tout en minuscules. Les traits de soulignement peuvent être utilisés dans le nom du module s'il améliore la lisibilité. Les packages Python doivent également avoir des noms courts tout en minuscules, bien que l'utilisation de soulignements soit déconseillée.
la source
import mypackage
. Dans le cas où vous voulez importer juste une fonction d'un module (même un fichier) est préférable d'utiliserfrom module import function
. Dans le cas d'un sous-dossierfrom subfolder.module import function
, vous pouvez simplement appelerfunction()
sans déclencher d'autres parties de code. Aussi, ne l'utilisez pasfrom module import *
si vous n'en avez pas vraiment besoin.import mypackage
? L'ajoutimport mymodule
à__init__.py
ne fonctionne pas ..Étant donné que personne n'a encore abordé cette question du PO:
Voici un exemple minimal absolu, montrant les étapes de base de la préparation et du téléchargement de votre package vers PyPI à l'aide de
setuptools
ettwine
.Ce n'est en aucun cas un substitut à la lecture au moins du tutoriel , il y a beaucoup plus que ce qui est couvert dans cet exemple très basique.
La création du package lui-même est déjà couverte par d'autres réponses ici, alors supposons que nous avons cette étape couverte et notre structure de projet comme ceci:
Pour l'utiliser
setuptools
pour le packaging, nous devons ajouter un fichiersetup.py
, celui-ci va dans le dossier racine de notre projet:Au minimum, nous spécifions les métadonnées de notre package, notre
setup.py
ressemblerait à ceci:Depuis que nous avons défini
license='MIT'
, nous incluons une copie dans notre projet commeLICENCE.txt
, à côté d'un fichier readme dans reStructuredText commeREADME.rst
:À ce stade, nous sommes prêts à commencer à emballer en utilisant
setuptools
, si nous ne l'avons pas déjà installé, nous pouvons l'installer avecpip
:Pour ce faire et créer un
source distribution
, dans notre dossier racine de projet, nous appelons notresetup.py
depuis la ligne de commande, en spécifiant que nous voulonssdist
:Cela créera notre package de distribution et les informations sur les œufs, et aboutira à une structure de dossiers comme celle-ci, avec notre package dans
dist
:À ce stade, nous avons un package que nous pouvons installer à l'aide
pip
de notre racine de projet (en supposant que vous avez tous les noms comme dans cet exemple):Si tout se passe bien, nous pouvons maintenant ouvrir un interpréteur Python, je dirais quelque part en dehors de notre répertoire de projet pour éviter toute confusion, et essayer d'utiliser notre nouveau package brillant:
Maintenant que nous avons confirmé l'installation et le fonctionnement du package, nous pouvons le télécharger sur PyPI.
Comme nous ne voulons pas polluer le référentiel en direct avec nos expériences, nous créons un compte pour le référentiel de test et installons
twine
pour le processus de téléchargement:Maintenant que nous y sommes presque, avec notre compte créé, nous disons simplement
twine
de télécharger notre package, il demandera nos informations d'identification et téléchargera notre package dans le référentiel spécifié:Nous pouvons maintenant nous connecter à notre compte sur le référentiel de test PyPI et nous émerveiller de notre package fraîchement téléchargé pendant un certain temps, puis le saisir en utilisant
pip
:Comme nous pouvons le voir, le processus de base n'est pas très compliqué. Comme je l'ai dit plus tôt, il y a beaucoup plus que couvert ici, alors allez-y et lisez le tutoriel pour une explication plus approfondie.
la source
setuptools
?twine
, mais vous pouvez tester votre package localement avant de le publier après l'avoir créé avecsetuptools
.Une fois que vous avez défini les commandes que vous avez choisies, vous pouvez simplement faire glisser et déposer le fichier enregistré dans le dossier Lib de vos fichiers de programme python.
la source
Créez un fichier nommé "hello.py"
Si vous utilisez Python 2.x
Si vous utilisez Python 3.x
Exécutez le fichier. Ensuite, vous pouvez essayer ce qui suit:
Si vous voulez un peu de mal, vous pouvez utiliser ce qui suit:
Si vous utilisez Python 2.x
Si vous utilisez Python 3.x
Voir celui sur la parenthèse à côté du définir? C'est important. C'est celui que vous pouvez utiliser dans la définition.
Texte - Vous pouvez l'utiliser lorsque vous voulez que le programme dise ce que vous voulez. Selon son nom, c'est du texte. J'espère que vous savez ce que signifie le texte. Cela signifie "mots" ou "phrases".
Exécutez le fichier. Ensuite, vous pouvez essayer ce qui suit si vous utilisez Python 3.x:
Pour Python 2.x - Je suppose que c'est la même chose avec Python 3? Aucune idée. Corrigez-moi si j'ai fait une erreur sur Python 2.x (je connais Python 2 mais je suis habitué à Python 3)
la source
J'ai créé un projet pour lancer facilement un squelette de projet à partir de zéro . https://github.com/MacHu-GWU/pygitrepo-project .
Et vous pouvez créer un projet de test, par exemple le let,
learn_creating_py_package
.Vous pouvez apprendre quel composant vous devez avoir à différentes fins comme :
L'avantage d'utiliser
pygitrepo
est que ces fastidieux sont automatiquement créés lui - même et adapter votrepackage_name
,project_name
,github_account
,document host service
,windows or macos or linux
.C'est un bon endroit pour apprendre à développer un projet python comme un pro.
J'espère que cela pourrait vous aider.
Je vous remercie.
la source