... mais Python a quelque chose comme le [bundler] de Ruby (http://bundler.io/) Non (je ne pense pas que ce soit unifié même si ça va) Une structure de répertoires gratuite pour chaque produit ...
Au moins je voulais unifier mes produits Structure de répertoire lors de la création d'une bibliothèque Python Écrivez des notes sur la construction de l'environnement. J'oublierai ...
Je suis conscient que la version de Python utilisée est la 3.3 ou une version ultérieure. Avant cela (3.2, 3.1 ... 2.x) n'est pas pris en compte. Je ne pense pas que ce soit un problème ...
J'ai créé une étrange bibliothèque appelée ** fizzbuzz **. C'est une bibliothèque ou un outil de ligne de commande. J'écrirai des notes basées sur la structure de cette bibliothèque.
La structure des répertoires et des fichiers est la suivante.
fizzbuzz
└lib #Corps de la bibliothèque
└bin #Corps du script d'exécution
└fizzbuzz #Répertoire des noms de bibliothèque
└ __init__.py #Les paramètres d'initialisation lors de l'importation de la bibliothèque sont ici
└test #Fichier test
requirements.txt # travis-ci et configuration.Utiliser avec py. pépin--Peut être fait avec gel.
info.py #Fichier contenant des informations sur l'auteur du package, etc.
version.py #Fichier contenant les informations de version
setup.py #Fichier pour être la clé
Je pense que ça va à cause de ça.
À partir de Python 3.3, `` virtualenv '' est inclus. Pour tester le fonctionnement de la bibliothèque, utilisez la commande suivante Créez un environnement d'exécution Python local.
> pyvenv .venv
Je l'utilise depuis virtualenv, donc c'est sous .venv J'essaie de créer un environnement pour pyvenv, mais je pense que c'est facultatif (comme .pvenv).
Depuis que j'ai construit un environnement d'exécution Python local,
activate
La coquillesource
Importez avec une commande.
En faisant cela, l'environnement Python sous
.venv``` sera utilisé. (comme la commande python)
> source .venv/bin/activate
Jusqu'à une certaine version de virtualenv La bibliothèque système a été importée par virtualenv, Il ne peut pas être importé en tant que nouvelle version de virtualenv et pyvenv. L'exécution de pyvenv crée un environnement pur.
Par conséquent, l'environnement est créé sans easy_install
.
Exécutez la commande suivante pour configurer
setuptools```.
Cité à partir de la page PyPI de setuptools.
> wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python
Maintenant, exécutez la commande easy_install et c'est dans PyPI Vous pourrez installer le package. Mais plutôt que d'installer le package PyPI avec easy_install
Il est plus facile à utiliser avec pip. Mettons pip...
## installation de pip
Si easy_install est installé, vous pouvez facilement installer pip.
easy_install pip
Maintenant tu es prêt.
# Faites une liste des bibliothèques requises
Si votre bibliothèque utilise une autre bibliothèque
Dans le hachage passé à la fonction setuptools.setup
Vous devez spécifier install_requires.
Avec pip, vous pouvez facilement créer une liste des bibliothèques requises.
pip freeze > requirements.txt
Travis CI utilise également requirements.txt
Dans setup.py, utilisez `` `` requirements.txt``` pour spécifier install_requires.
```py
setup({
install_requires: open('requirements.txt').read().splitlines(),
})
Cela installera les bibliothèques externes requises par la bibliothèque.
Quel fichier doit avoir les informations sur le créateur de la bibliothèque affichées par PyPI
J'étais perdu, mais je l'ai mis en tant que info.py
directement sous la racine du paquet.
info.py
# package information.
INFO = dict(
name = "PyFizzBuzz",
description = "FizzBuzz cli tool",
author = "Keiji Matsuzaki",
author_email = "[email protected]",
license = "MIT License",
url = "https://github.com/futoase/fizzbuzz",
classifiers = [
"Programming Language :: Python :: 3.2",
"Programming Language :: Python :: 3.3",
"License :: OSI Approved :: MIT License"
]
)
les classificateurs ont leur propre bibliothèque depuis Liste ici Sélectionnez et définissez le genre qui semble correspondre.
version.Spécifiez VERSION dans py.
#### **`version.py`**
```py
VERSION = "0.0.3"
** 20131017 postscript **
package_info dans le répertoire.py, version.py, requirements.Parce que vous n'avez pas spécifié de fichier txt
Je dois écrire un fichier MANIFEST.in.
Je n'ai pas pu trouver de problèmes qui n'étaient pas inclus car je ne les avais pas vérifiés au moment de la rédaction de cet article.
Alors ajoutez-le.
#### **`MANIFEST.in`**
```py
include info.py
include version.py
include requirements.txt
Testez le package à l'aide de la commande pip
> pip install .
En vous spécifiant dans votre propre répertoire et en effectuant une installation pip,
pyvenv
Vous pouvez utiliser votre propre bibliothèque dans votre environnement.
> pip list
konira (0.3.2)
pip (1.4.1)
PyFizzBuzz (0.0.3)
setuptools (1.1.5)
Si vous trouvez un bogue dans votre bibliothèque après l'installation de pip Exécutez la commande suivante sous l'environnement de pyvenv.
> pip uninstall PyFizzBuzz
C'est comme spécifier `` gemspec``` dans le Gemfile ... Je pense que vous devriez exécuter la commande avec sentiments ...
Cette fois, fizzbuzz est exécuté en tant que commande, donc
.venv/bin/La commande se trouve dans fizzbuzz.
(.venv) > fizzbuzz 10 | head -3
1
2
Fizz
J'ai pu vérifier l'opération.
# Inscrivez-vous avec PyPI
Si vous ne vous êtes pas enregistré auprès de PyPI, exécutez la commande suivante pour vous inscrire.
#### **`~/.Si vous n'avez pas généré de fichier piprc, vous serez invité à enregistrer votre nom d'utilisateur et votre mot de passe.(Devrait être)...`**
> python setup.py register
Téléchargez le package sur PyPI.
> python setup.py sdist upload
OK si la page de la bibliothèque est créée dans PyPI
Cela peut être différent pour les bibliothèques d'extensions C. (Je n'envisage pas de télécharger des fichiers d'œufs ...)
Le nombre de téléchargements par jour, une liste des versions de fichiers précédemment téléchargées, etc. Vous pouvez le voir sur la page PyPI. (Connexion requise)
C'est assez amusant.
Comme setuptools est intégré à distribuer, seul setuptools est importé, mais Avant l'intégration, les packages à importer étaient séparés par setup.py sous la forme suivante.
setup.py
try:
import setuptools
except ImportError:
from distribute_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages
Distribute_setup.py a été supprimé d'ici (je ne peux pas y accéder pour le moment), et il a été inclus dans le package.
C'était bien d'être unifié avec les outils de configuration. (Cet article peut être possible car il ne considère pas la compatibilité descendante ...)
Recommended Posts