Importer un module dans python, besoin d'explication.

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je suis totalement débutant dans la programmation et j'ai besoin d'aide pour pouvoir importer un module dans python.

J'ai un projet en tête que j'aimerais le faire avec python. Vu que ce projet part d'une API , je souhaiterais l'utiliser avec le module REQUEST.

Mon probleme est: je ne sais pas du tout l'importer pour l'utiliser. Je suis allé télécharger le module et j'ai donc récuperé le fichier mais ensuite? Je dois le mettre ou ? dans "LIB" ?

Pouvez vous m'indiquer la démarche svp ?

Crdl

(Je suis sous Python 3.5)

+0 -0

La procédure d'installation est décrite ici. Tu peux soit utiliser pip (recommandé), soit récupérer le code (au format zip), te rendre dans le dossier et lancer python setup.py install.

Une fois le module installé, tu peux l'importer et l'utiliser.

Au passage, tu peux jeter un coup d'oeil aux environnements virtuels.

+0 -0

Attention, si tu es sous Linux, utiliser directement pip en dehors d'un virtualenv n'est pas forcément le plus recommandé. Mieux vaut installer le paquet correspondant à requests s'il existe (sous debian c'est python-requests), ou utiliser pip proprement dans un environnement virtuel.

Attention, si tu es sous Linux, utiliser directement pip en dehors d'un virtualenv n'est pas forcément le plus recommandé. Mieux vaut installer le paquet correspondant à requests s'il existe (sous debian c'est python-requests), ou utiliser pip proprement dans un environnement virtuel.

yoch

Au contraire, c'est un propos que je lis souvent mais il n'y aucun intérêt particulier aux paquets de la distro par rapport à utiliser pip directement. Par contre pip a un avantage indéniable : sa base est à jour (et bonus sympa pour les développeurs, il gère très bien comme un grand les requirements d'un projet Python que tu peux trouver sur GitHub par exemple).

+1 -0

Je peux te dire que j'ai déja cassé pip sur une debian simplement en faisant pip install --upgrade requests (problème de compatibilité avec la version de requests utilisée par pip, justement). Et je me souviens avoir eu d'autres soucis similaires par le passé.

Il y a selon moi 2 façons différentes d'installer des libs python : passer par le gestionnaire de paquets de sa distro, ou par pip. Mélanger les deux est une très mauvaise idée, même si ça va fonctionner assez souvent en pratique.

Le problème est qu'utiliser pip au niveau global va souvent interférer avec les versions des libs python de ta distro (voire avec pip lui même s'il a été installé depuis le gestionnaire de paquets). Il y a donc un risque sérieux de casser des programmes existants sur ta distribution, parce qu'eux vont utiliser des versions obsolètes de certaines libs python. C'est pourquoi je préconise d'utiliser pip uniquement avec virtualenv (non que ce soit impossible à utiliser autrement, mais c'est autrement plus délicat et sujet à causer des problèmes que le débutant saura difficilement résoudre).

Je peux te dire que j'ai déja cassé pip sur une debian simplement en faisant pip install --upgrade requests (problème de compatibilité avec la version de requests utilisée par pip, justement). Et je me souviens avoir eu d'autres soucis similaires par le passé.

En même temps, si tu n'upgrades qu'un morceau, faut pas s'étonner. :-°

Il y a selon moi 2 façons différentes d'installer des libs python : passer par le gestionnaire de paquets de sa distro, ou par pip. Mélanger les deux est une très mauvaise idée, même si ça va fonctionner assez souvent en pratique.

Raison de plus d'utiliser pip, tu ne seras pas pris au dépourvu le jour où tu veux installer un module qui n'est pas proposé par ta distro.

Le problème est qu'utiliser pip au niveau global va souvent interférer avec les versions des libs python de ta distro (voire avec pip lui même s'il a été installé depuis le gestionnaire de paquets).

Euh… o_O pip va chercher la version des modules qui correspond à la version de pip que tu as installée (qui elle même vient avec CPython), donc ce genre de problème ne peut pas arriver par construction (à moins d'y mettre du sien peut être).

+0 -0

Je n'ai pas spécialement envie de débattre plus avant, et je pense avoir suffisamment expliqué mon point de vue : utiliser pip pour installer des trucs sur sa machine n'est pas forcément safe, encore moins pour un débutant.

Raison de plus d'utiliser pip, tu ne seras pas pris au dépourvu le jour où tu veux installer un module qui n'est pas proposé par ta distro.

Pas faux que c'est clairement un avantage, mais rien ne t'empêche d'utiliser pip uniquement pour ce genre de cas.

Euh… o_O pip va chercher la version des modules qui correspond à la version de pip que tu as installée (qui elle même vient avec CPython), donc ce genre de problème ne peut pas arriver par construction (à moins d'y mettre du sien peut être).

J'aimerais bien une source à ce que tu affirmes (ça voudrait dire que la version que j'ai utilisé serait buguée à ce niveau).

Rien que pour te faire plaisir, je viens de reproduire ce comportement (remis la version de pip fournie par défaut dans ma distrib, et pouf pip ne fonctionne plus vu que certaines libs ne sont pas compatibles) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
pi@raspberrypi:~ $ apt-cache show python-pip
Package: python-pip
Version: 1.5.6-5
Installed-Size: 470
Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
Architecture: all
Depends: ca-certificates, python-colorama, python-distlib, python-html5lib, python-pkg-resources, python-requests, python-setuptools (>= 0.6c1), python-six, python, python:any (<< 2.8), python:any (>= 2.7.5-5~)
Recommends: build-essential, python-dev-all (>= 2.6), python-wheel
Size: 114120
SHA256: 21b76a0322c7351341295443764b49a3375ec1a280f3c3b298e863865d78aa8b
SHA1: 0d6b4dfd922fe228b328dbedb859d19917d135f4
MD5sum: 30c0667000a58c7b84df5caa236cc78c
Description: alternative Python package installer
 pip is a replacement for easy_install, and is intended to be an improved
 Python package installer.  It integrates with virtualenv, doesn't do partial
 installs, can save package state for replaying, can install from non-egg
 sources, and can install from version control repositories.
Description-md5: 8d21e4048f43043df36daaae334010b5
Homepage: http://www.pip-installer.org/
Tag: admin::package-management, devel::lang:python, devel::packaging,
 implemented-in::python, role::program
Section: python
Priority: optional
Filename: pool/main/p/python-pip/python-pip_1.5.6-5_all.deb
pi@raspberrypi:~ $ sudo pip install --upgrade pip==1.5.6
Collecting pip==1.5.6
  Downloading pip-1.5.6-py2.py3-none-any.whl (1.0MB)
    100% |████████████████████████████████| 1.0MB 46kB/s
Installing collected packages: pip
  Found existing installation: pip 7.1.2
    Uninstalling pip-7.1.2:
      Successfully uninstalled pip-7.1.2
Successfully installed pip-1.5.6
You are using pip version 1.5.6, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pi@raspberrypi:~ $ sudo pip install --upgrade requests
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 7, in <module>
    from pip import main
  File "/usr/local/lib/python2.7/dist-packages/pip/__init__.py", line 11, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/local/lib/python2.7/dist-packages/pip/vcs/mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 22, in <module>
    from pip._vendor import requests, six
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/__init__.py", line 53, in <module>
    from .packages.urllib3.contrib import pyopenssl
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py", line 70, in <module>
    ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,
AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'

+0 -0

Ton problème est un problème de urllib3. Pas de pip. Voir cette discussion. Bon, en plus, se baser sur une version vieille de un an et demi pour dire que pip est dangereux pour le débutant parce qu'une manip de mise à jour foire (en faisant croire au passage que ça plante carrément pip, ce qui n'est pas le cas), faut déjà en vouloir…

J'aimerais bien une source à ce que tu affirmes

pip lit les informations fournies dans les métadonnées du package pour savoir si il est compatible avec la version de Python sur ta machine.

+0 -0

Sérieusement, je commence à douter de ta bonne foi là…

Tout d'abord, je ne sais pas si tu m'as bien lu, mais la version de pip que j'utilise pour cette démonstration ("version vieille de un an et demi" comme tu dis) est celle livrée par ma distro (raspbian jessie à jour, qui ne date pas spécialement de Mathusalem donc). C'était donc juste une mise en "conditions réelles" d'un lambda-user.

Je sais lire un log moi aussi, et je me fiche pas mal ici de l'origine exacte du problème, toujours est-il que c'est bien le downgrade de pip qui a causé ce souci. Et oui, ça plante bel et bien pip, puisqu'il devient inutilisable (du moins en utilisation normale) à cause de ça.
Au passage, ce n'est qu'un échantillon du genre de problème pouvant survenir que j'ai donné, des tas d'autres ennuis peuvent aussi arriver en dehors de pip (cf. un de mes posts précédents), pour la même raison (libs récentes incompatibles avec apps installées). Et je ne te parle même pas des horreurs qui peuvent arriver lorsque tu met à jour une distro dans ce genre de situation.

Dernier point, il ne s'agit pas de compatibilité de CPython ici, mais compatibilité entre diverses lib, et à ce jeu là il y a clairement un souci, jusqu'à preuve du contraire (ie. qu'on m'explique vraiment pourquoi ça merde aussi souvent). Je ne dis pas que c'est systématiquement de la faute de pip d'ailleurs, vu que certaines libs ont probablement des soucis de méta-données.

Finalement, une précision s'impose : il ne faut pas voir mes précédents messages comme un encouragement à ne pas utiliser pip, outil que j'utilise très souvent. Mais pour moi, c'est un outil de dev, qui s'utilise avec virtualenv uniquement (oui, je suis un peu extrémiste, mais c'est vraiment trop facile de tout péter sans ça).
D'ailleurs, ce n'est pas spécialement lié à pip : installer un module python au niveau global juste pour faire du dev devrait être interdit, que ce soit avec pip ou autre chose. Et la doc devrait être plus claire à ce sujet, vu le nombre d'ignares qui conseillent l'inverse un peu partout sur le web (sudo pip install ...)…

EDIT: en googlant un peu, je trouve par exemple ce post qui partage mon point de vue (et qui me semble bien plus sensé que le post précédent).

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte