Comments on: Les imports en Python http://sametmax.com/les-imports-en-python/ Deux développeurs en vadrouille qui se sortent les doigts du code Wed, 05 Feb 2014 12:15:31 +0000 hourly 1 http://wordpress.org/?v=3.3.1 By: Sam http://sametmax.com/les-imports-en-python/#comment-11480 Sam Mon, 22 Jul 2013 19:56:35 +0000 http://sametmax.com/?p=6127#comment-11480 Il faut toujours lancer la commande nose depuis le repertoire racine du projet, pas à l'interieur. Si tu veux lancer un test en particulier, tape le chemin vers ce fichier, relativement à la racine. Il faut toujours lancer la commande nose depuis le repertoire racine du projet, pas à l’interieur. Si tu veux lancer un test en particulier, tape le chemin vers ce fichier, relativement à la racine.

]]>
By: Mat http://sametmax.com/les-imports-en-python/#comment-11400 Mat Sat, 20 Jul 2013 19:51:27 +0000 http://sametmax.com/?p=6127#comment-11400 Salut, Merci pour le tutoriel :) Par contre à un moment, vous dîtes : <blockquote> Pour ce genre de scénario, il faut donc avoir le dossier qui les contient à côté de votre package. Ainsi, si j’avais des tests unitaires, je devrais faire un dossier tests à côté du dossier test_imports. Par exemple, transformer mon arbo en un truc comme ça : src ...|_ test_imports ...|_ tests Afin que je lance les tests en faisant python tests depuis src. Et dans mes fichiers de tests, je pourrai faire des from test_imports import truc. </blockquote> Cependant, j'ai créé la même arborescence (pour faire des tests unitaires), avec: <blockquote> test_import ...........|_ __init__py ...........|_ src .................|_ __init__ .................|_ code.py ...........|_ tests .................|_ __init__py .................|_ test_code.py </blockquote> Tous les __init__.py sont vides. Dans test_code.py, j'ai mis "from src import code" Puis, en me plaçant dans le répertoire test_import dans une console, je fais: > python tests/test_code.py Et j'obtiens un joli ImportError, alors que c'est censé marcher d'après le paragraphe cité ci-dessus... En fait, j'ai testé en imprimant le sys.path, et il ajoute "test_import/tests" et non "test_import" comme indiqué... Qu'est ce que j'ai mal fait ? Mon but final est de pouvoir utiliser nosetests depuis n'importe où dans l'arborescence, sans avoir à faire des "sys.path.append()" de partout. Merci pour votre aide :) ! Salut,

Merci pour le tutoriel :)

Par contre à un moment, vous dîtes :

Pour ce genre de scénario, il faut donc avoir le dossier qui les contient à côté de votre package. Ainsi, si j’avais des tests unitaires, je devrais faire un dossier tests à côté du dossier test_imports. Par exemple, transformer mon arbo en un truc comme ça :

src
…|_ test_imports
…|_ tests

Afin que je lance les tests en faisant python tests depuis src. Et dans mes fichiers de tests, je pourrai faire des from test_imports import truc.

Cependant, j’ai créé la même arborescence (pour faire des tests unitaires), avec:

test_import
………..|_ __init__py
………..|_ src
……………..|_ __init__
……………..|_ code.py
………..|_ tests
……………..|_ __init__py
……………..|_ test_code.py

Tous les __init__.py sont vides.
Dans test_code.py, j’ai mis “from src import code”

Puis, en me plaçant dans le répertoire test_import dans une console, je fais:
> python tests/test_code.py

Et j’obtiens un joli ImportError, alors que c’est censé marcher d’après le paragraphe cité ci-dessus…
En fait, j’ai testé en imprimant le sys.path, et il ajoute “test_import/tests” et non “test_import” comme indiqué…

Qu’est ce que j’ai mal fait ?

Mon but final est de pouvoir utiliser nosetests depuis n’importe où dans l’arborescence, sans avoir à faire des “sys.path.append()” de partout.

Merci pour votre aide :) !

]]>
By: Sam http://sametmax.com/les-imports-en-python/#comment-9440 Sam Tue, 28 May 2013 10:42:20 +0000 http://sametmax.com/?p=6127#comment-9440 C'est la même chose: tu as la synaxes des imports relatifs uniquement si tu as les imports absolus. Sinon les imports sont des imports absotifs :-) Ni absolus, ni relatifs, mais à l'arrache ^^ C’est la même chose: tu as la synaxes des imports relatifs uniquement si tu as les imports absolus. Sinon les imports sont des imports absotifs :-) Ni absolus, ni relatifs, mais à l’arrache ^^

]]>
By: Yohann http://sametmax.com/les-imports-en-python/#comment-9435 Yohann Tue, 28 May 2013 09:43:02 +0000 http://sametmax.com/?p=6127#comment-9435 Je viens relire cet article depuis celui sur le nouveau snipet python 3 et je tombe sur ça: <blockquote>Ce n'est pas forcément ce que vous voulez. Python 3 corrige cela en permettant des imports relatifs, et Python 2.7 peut en bénéficier en important tout en haut du module : from __future__ import absolute_import </blockquote> c'est pas plustôt les import absolus justement que permet python3 ? Encore merci pour vos articles, continuez les mecs! Je viens relire cet article depuis celui sur le nouveau snipet python 3 et je tombe sur ça:

Ce n’est pas forcément ce que vous voulez. Python 3 corrige cela en permettant des imports relatifs, et Python 2.7 peut en bénéficier en important tout en haut du module :

from __future__ import absolute_import

c’est pas plustôt les import absolus justement que permet python3 ?

Encore merci pour vos articles, continuez les mecs!

]]>
By: Sam http://sametmax.com/les-imports-en-python/#comment-9006 Sam Mon, 20 May 2013 07:14:25 +0000 http://sametmax.com/?p=6127#comment-9006 C'est une bonne tag line pour le blog ça. C’est une bonne tag line pour le blog ça.

]]>
By: Etienne http://sametmax.com/les-imports-en-python/#comment-8994 Etienne Sun, 19 May 2013 21:05:59 +0000 http://sametmax.com/?p=6127#comment-8994 C'est fou le nombre de fois où je me suis dit: "Y'a un truc à ce sujet sur S&M", alors je google: "décorateurs site:sametmax.com", par exemple. Pour dire, même si je google '"à poil les putes" site:sametmax.com' je tombe sur des trucs vachement intéressants: 4 résultats: - Quel hébergement Web pour les projets Python ? - Monitorez vos serveurs avec munin et notifications par email - Concurrence sans threads en python - FizzBuzz en Python Comme quoi on peut voir sa bite en gros plan et avoir aussi un cerveau... C’est fou le nombre de fois où je me suis dit: “Y’a un truc à ce sujet sur S&M”, alors je google: “décorateurs site:sametmax.com”, par exemple.

Pour dire, même si je google ‘”à poil les putes” site:sametmax.com’ je tombe sur des trucs vachement intéressants:

4 résultats:
- Quel hébergement Web pour les projets Python ?
- Monitorez vos serveurs avec munin et notifications par email
- Concurrence sans threads en python
- FizzBuzz en Python

Comme quoi on peut voir sa bite en gros plan et avoir aussi un cerveau…

]]>
By: glickind http://sametmax.com/les-imports-en-python/#comment-8970 glickind Sat, 18 May 2013 16:24:06 +0000 http://sametmax.com/?p=6127#comment-8970 <span class="merci"></span>On peut rappeler explicitement que faire un import exécute le code du fichier/module importé et faire un lien sur votre article: <a href="http://sametmax.com/pourquoi-if-__name__-__main__-en-python/" rel="nofollow"> Pourquoi if __name__ == '__main__' en Python ?</a> Par ailleurs, comme tu as demandé une relecture: s/Mais si je me met ici/Mais si je me met<strong>s</strong> ici/ s/quand tout à échoué/quand tout <strong>a</strong> échoué/ On peut rappeler explicitement que faire un import exécute le code du fichier/module importé et faire un lien sur votre article:
Pourquoi if __name__ == ‘__main__’ en Python ?

Par ailleurs, comme tu as demandé une relecture:
s/Mais si je me met ici/Mais si je me mets ici/
s/quand tout à échoué/quand tout a échoué/

]]>
By: martin http://sametmax.com/les-imports-en-python/#comment-8963 martin Fri, 17 May 2013 16:49:38 +0000 http://sametmax.com/?p=6127#comment-8963 Après avoir beaucoup chipoté en plaçant mes modules personnels dans le dossier site_package, ou en ajoutant le dossier contenant le module dans le PYTHONPATH avec un EXPORT dans mon fichier .bashrc ou bash_profile, je me suis finalement tourné vers les fichiers <strong>.pth</strong> à placer dans site-package (voir un article ancien de Bob Ipolito <a href="http://bob.ippoli.to/archives/2005/02/06/using-pth-files-for-python-development/" rel="nofollow">Using .pth files for Python development</a>). Il y en a de plusieurs types dont le plus simple contient simplement le chemin du dossier à ajouter (messcrits.pth): <code>/Users/Shared/Dropbox/messcripts</code> et qui me donne accès à toutes les classes et les fonctions qui sont dans les fichiers présents (comme il est dans Dropbox, je peux m'en servir sur toutes les machines que j'utilise, Linux et Mac OS X, il suffit d'utiliser sur chacune un fichier .pth pointant vers le dossier). Il y a moyen d'ajouter plusieurs dossiers (un par ligne) comme dans (Django les supporte aussi, voir <a href="http://djangotricks.blogspot.be/2008/09/note-on-python-paths.html" rel="nofollow">A Note on Python Paths </a>). <code>/Library/test/django_src/trunk /Library/tes/myproject_src/trunk</code> D'autres compliquent un peu les choses en écrivant: <code>import sys; sys.path.insert(0,'/Library/Frameworks/GDAL.framework/Versions/1.9/Python/2.7/site-packages')</code> pour être surs que leur module soit en première position dans la liste du PYTHONPATH. Et enfin, certains utilisent cette technique pour changer l'appel du module comme le fichier Ngl.pth qui ne contient que PyNGL, ce qui permet d'utiliser soit <code>import Ngl</code> soit <code>import PyNGL</code> Après avoir beaucoup chipoté en plaçant mes modules personnels dans le dossier site_package, ou en ajoutant le dossier contenant le module dans le PYTHONPATH avec un EXPORT dans mon fichier .bashrc ou bash_profile, je me suis finalement tourné vers les fichiers .pth à placer dans site-package (voir un article ancien de Bob Ipolito Using .pth files for Python development).

Il y en a de plusieurs types dont le plus simple contient simplement le chemin du dossier à ajouter (messcrits.pth):

/Users/Shared/Dropbox/messcripts

et qui me donne accès à toutes les classes et les fonctions qui sont dans les fichiers présents (comme il est dans Dropbox, je peux m’en servir sur toutes les machines que j’utilise, Linux et Mac OS X, il suffit d’utiliser sur chacune un fichier .pth pointant vers le dossier).

Il y a moyen d’ajouter plusieurs dossiers (un par ligne) comme dans (Django les supporte aussi, voir A Note on Python Paths ).
/Library/test/django_src/trunk
/Library/tes/myproject_src/trunk

D’autres compliquent un peu les choses en écrivant:
import sys; sys.path.insert(0,'/Library/Frameworks/GDAL.framework/Versions/1.9/Python/2.7/site-packages')
pour être surs que leur module soit en première position dans la liste du PYTHONPATH.

Et enfin, certains utilisent cette technique pour changer l’appel du module comme le fichier Ngl.pth qui ne contient que PyNGL, ce qui permet d’utiliser soit
import Ngl
soit
import PyNGL

]]>
By: Sam http://sametmax.com/les-imports-en-python/#comment-8959 Sam Fri, 17 May 2013 12:31:42 +0000 http://sametmax.com/?p=6127#comment-8959 J'ai updaté l'article puor rendre les noms de fichiers plus lisibbles, fournir une arbo de test et mettre un peu de zik pour faire passer la pillule. Tu vois autre chose à faire kontre ? J’ai updaté l’article puor rendre les noms de fichiers plus lisibbles, fournir une arbo de test et mettre un peu de zik pour faire passer la pillule.

Tu vois autre chose à faire kontre ?

]]>
By: Etienne http://sametmax.com/les-imports-en-python/#comment-8937 Etienne Thu, 16 May 2013 13:41:14 +0000 http://sametmax.com/?p=6127#comment-8937 Limpide. Limpide.

]]>