Bladeren bron

ajout manifest, config nose, setup.py

olinox 7 jaren geleden
bovenliggende
commit
98220aa020
5 gewijzigde bestanden met toevoegingen van 167 en 3 verwijderingen
  1. 7 3
      .gitignore
  2. 2 0
      MANIFEST.in
  3. 65 0
      deployer_app.TXT
  4. 7 0
      nose2.cfg
  5. 86 0
      setup.py

+ 7 - 3
.gitignore

@@ -1,7 +1,11 @@
 *.pyc
+
+# Eclipse pydev project
 .project
 .pydevproject
 .settings/
-temp/
-test/
-output/
+
+# tests
+htmlcov/
+.coverage
+

+ 2 - 0
MANIFEST.in

@@ -0,0 +1,2 @@
+include *.md
+recursive-include hello_world *.png *.jpg *.gif

+ 65 - 0
deployer_app.TXT

@@ -0,0 +1,65 @@
+Pour deployer une application python:
+http://sametmax.com/creer-un-setup-py-et-mettre-sa-bibliotheque-python-en-ligne-sur-pypi/
+
+1- Créer sa lib (ici: "lib_exemple")
+2- la mettre dans un dossier portant le même nom:
+
+- lib_exemple
+   - MANIFEST.in [un fichier texte qui liste les fichiers non Python qu’on inclura dans l’installation]
+   - README.md  [un fichier markdown contiendra une présentation du package]
+   - setup.py
+   - lib_exemple
+      - main.py
+      - core
+      - ui
+      ...Etc
+
+3- pour l'installeur, on devrait utiliser distutils ou setuptools (plus complet, gère les dépendances)
+
+4- rendre notre paquet plus facile à utiliser 
+- en documentant: on décrit le package dans __init__, le module dans l'en-tête du fichier, puis chaque fonction
+- en faisant les differents imports depuis le __init__ principal, de manière à ce que l'utilisateur puisse faire
+import lib_exemple.calcul plutôt que lib_exemple.core.calcul
+- en creant une variable __all__ = ['calcul'] pour limiter les fonctions importables avec *
+- en ajoutant une version: 
+__version__ = "0.0.1"
+
+5 - dans le readme:
+    - A quoi sert la lib.
+    - Comment l’installer.
+    - Un exempe concret d’utilisation.
+    - La licence d’utilisation.
+    - Un lien vers la doc si elle existe
+au format markdown:
+https://daringfireball.net/projects/markdown/basics
+
+6 - dans le manifest, ajouter des include et recursive-include pour ajouter les fichiers non python
+
+7- creer le setup.py (cf PJ)
+
+8- dans le dossier principal, executer:
+python setup.py install
+
+9- si la lib s'est bien installée, on doit pouvoir faire avec la console python:
+> from lib_exemple import fonction_test
+> fonction_test()
+
+et avec l'invite de commande si on a créé des commandes dans le setup
+
+
+10- pour enregistrer sur Pypi (et rendre la lib installable avec pip):
+python setup.py register
+- choisir option 2 la première fois et créer son compte, puis choisir 1 ensuite
+
+le but est d'obtenir ceci:
+Registering lib_exemple to http://pypi.python.org/pypi
+Server response (200): OK
+
+puis executer:
+python setup.py sdist upload
+
+11- par la suite, pour uploader à nouveau, le numero de version doit être modifié
+
+
+
+

+ 7 - 0
nose2.cfg

@@ -0,0 +1,7 @@
+[unittest]
+with-coverage = True
+
+[coverage]
+always-on = True
+coverage = .
+coverage-report = html

+ 86 - 0
setup.py

@@ -0,0 +1,86 @@
+# fichier et explications issues de: http://sametmax.com/creer-un-setup-py-et-mettre-sa-bibliotheque-python-en-ligne-sur-pypi/
+
+from setuptools import setup, find_packages
+
+import hello_world
+
+setup(
+
+    # le nom de votre bibliothèque, tel qu'il apparaitre sur pypi
+    name='hello_world',
+
+    # la version du code
+    version=hello_world.__version__,
+
+    # Liste les packages à insérer dans la distribution
+    # plutôt que de le faire à la main, on utilise la foncton
+    # find_packages() de setuptools qui va cherche tous les packages
+    # python recursivement dans le dossier courant.
+    # C'est pour cette raison que l'on a tout mis dans un seul dossier:
+    # on peut ainsi utiliser cette fonction facilement
+    packages=find_packages(),
+
+    # votre pti nom
+    author="olivier.massot",
+
+    # Votre email, sachant qu'il sera publique visible, avec tous les risques
+    # que ça implique.
+    author_email="olivier.massot@gmail.com",
+
+    # Une description courte
+    description="Hello world",
+
+    # Une description longue, sera affichée pour présenter la lib
+    # Généralement on dump le README ici
+    long_description=open('README.md').read(),
+
+    # Vous pouvez rajouter une liste de dépendances pour votre lib
+    # et même préciser une version. A l'installation, Python essayera de
+    # les télécharger et les installer.
+    #
+    # Ex: ["docopt", "docutils >= 0.3", "lxml==0.5a7"]
+    #
+    # install_requires= ,
+
+    # Active la prise en compte du fichier MANIFEST.in
+    include_package_data=True,
+
+    # Une url qui pointe vers la page officielle de votre lib
+    url='http://codebox/lab/Integration-continue',
+
+    # Il est d'usage de mettre quelques metadata à propos de sa lib
+    # Pour que les robots puissent facilement la classer.
+    # La liste des marqueurs autorisées est longue:
+    # https://pypi.python.org/pypi?%3Aaction=list_classifiers.
+    #
+    # Il n'y a pas vraiment de règle pour le contenu. Chacun fait un peu
+    # comme il le sent. Il y en a qui ne mettent rien.
+    classifiers=[
+        "Programming Language :: Python",
+        "Development Status :: 1 - Planning",
+        "License :: OSI Approved",
+        "Natural Language :: French",
+        "Operating System :: OS Independent",
+        "Programming Language :: Python :: 2.7",
+        "Topic :: Communications",
+    ],
+
+    # C'est un système de plugin, mais on s'en sert presque exclusivement
+    # Pour créer des commandes, comme "django-admin".
+    # Par exemple, si on veut créer la fabuleuse commande "hello-command", on
+    # va faire pointer ce nom vers la fonction proclamer(). La commande sera
+    # créé automatiquement.
+    # La syntaxe est "nom-de-commande-a-creer = package.module:fonction".
+    entry_points={
+        'console_scripts': [
+            'hello-command = hello_world.core:hello_message',
+        ],
+    },
+
+    # A fournir uniquement si votre licence n'est pas listée dans "classifiers"
+    # ce qui est notre cas
+    license="WTFPL",
+
+    # Et encore d'autres paramètes...
+
+)