Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Pourquoi pip install truc se termine toujours par "error: Microsoft Visual C++ 10.0 is required." ???

+1 vote

Windows 10 x64, Python 3.4.x

$> pip install twisted
...
building 'twisted.test.raiser' extension
    error: Microsoft Visual C++ 10.0 is required. Get it with     "Microsoft Windows SDK 7.1": www.microsoft.com/download/details.aspx?id=8279

$> pip install crc16
...
building 'twisted.test.raiser' extension
    error: Microsoft Visual C++ 10.0 is required. Get it with     "Microsoft Windows SDK 7.1": www.microsoft.com/download/details.aspx?id=8279

Pareil.

Merci de ne pas me prendre pour un gros c0n (le degré moyen devrait suffire) j'ai évidemment suivi les instructions en me rendant sur www.microsoft.com/download/details.aspx?id=8279

Bon, j'ai le dernier framework .Net installé, j'ai les packages SDK dans plein de versions, etc. À chaque fois je retombe pour certaines libs sur ce genre de problème. La plupart du temps ça se passe très bien, par exemple docopt est un vrai succès :

$>pip install docopt
Collecting docopt
  Downloading docopt-0.6.2.tar.gz
Building wheels for collected packages: docopt
  Running setup.py bdist_wheel for docopt ... done
  Stored in directory: C:\Users\lec0nmoyen\AppData\Local\pip\Cache\wheels\b2\16\5f\c33a2bb5f2dce71205f8e65cbfd05647d79d441282be31fd82
Successfully built docopt
Installing collected packages: docopt
Successfully installed docopt-0.6.2

ou encore :

$>pip install pyusb
Collecting pyusb
  Downloading PyUSB-1.0.0.tar.gz (52kB)
    100% |################################| 61kB 840kB/s
Building wheels for collected packages: pyusb
  Running setup.py bdist_wheel for pyusb ... done
  Stored in directory: C:\Users\encorelui\AppData\Local\pip\Cache\wheels\18\b0\b8\83d67cc7a3b50866f908ca1104b553f7807e1e767ddf373427
Successfully built pyusb
Installing collected packages: pyusb
Successfully installed pyusb-1.0.0

Bref qu'est-ce qui manque sur ma machine ?????? j'ai essayé plein de trucs mais je suis prêt à toutes les bassesses et surtout à lire une méthode carrée qui marche. Je veux bien tous les SDK de la terre mais j'arrive à des bouclages du style pour installer ce SDK il te faut le framework .NET machin chose, là je le télécharge, et quand je l'installe il me dit vtff tu l'as déjà d'installé pauvre mec.
J'ai mal au fion aidez-moi svp.

demandé 31-Mar par Jaimal Aufion (112 points)
edité 1-Avr par lucas

1 Réponse

+1 vote

Ah, les joies de la compilation sous Windows.

Le problème vient du faire que certains packages Python ont besoin d'une compilation car ils incluent des fragments de code en C ou en C++, ces packages sont assez rares et la plupart du temps on ne s'en rend même pas compte car le packageur a pris soin de fournir un wheel pour l'architecture (c'est le cas de Pillow ou psycopg2).

Mais parfois, le package n'est pas assez connu et/ou maintenu pour fournir de lui même un wheel Windows compatible avec ton architecture, donc il faut passer par la case "compilation". Sous GNU/Linux ça ne pose généralement pas de problème car GNU/GCC est installé par défaut sur la plupart des systèmes, mais sous Windows c'est tout de suite un chemin de croix.

Dans la plupart des cas, il suffit de prendre Microsoft Visual Studio Express avec Visual C++ embarqué puis suivre quelques tutos pour bien connecter le compilateur made in Microsoft avec l'environnement Python, bon ça fait chier car faut installer une usine à gaz pour compiler un pauvre package de 100 ko alors que sous GNU/Linux ça passe crème, mais ainsi est faite la vie du développeur sous Windows (à savoir le pire système d'exploitation possible pour développer sereinement).

Des tutos sont disponibles sur Internet pour t'accompagner sur ce chemin ardu qui est le tien, par exemple :
https://makina-corpus.com/blog/metier/2016/compile_python_wheels_windows/compiler-les-librairies-python-sous-windows

répondu 31-Mar par debnet (934 points)

J'ai procédé à l'installation de Visual Studio Community pour résoudre le problème. Mais je tombe sur un nouveau blocage. J'ai upgradé mon environnement Python pour passer en 3.6.1. Et j'ai installé VS 2015 (community).
Cette fois j'ai un problème d'encoding lorsque tente d'installer certaines libraries tierces. Je précise que j'ai bien lu (et compris) l'article de Sam&Max au sujet de l'encoding en Python (http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/).
Mais dans les messages suivants je ne sais pas quels sont les fichiers que pip n'arrive pas à décoder. Au secours !

Avec pycrypto :

$> pip install pycrypto
Collecting pycrypto
  Using cached pycrypto-2.6.1.tar.gz
Installing collected packages: pycrypto
  Running setup.py install for pycrypto ... error
Exception:
Traceback (most recent call last):
  File "d:\python361\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 111: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\python361\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "d:\python361\lib\site-packages\pip\commands\install.py", line 342, in run
    prefix=options.prefix_path,
  File "d:\python361\lib\site-packages\pip\req\req_set.py", line 784, in install
    **kwargs
  File "d:\python361\lib\site-packages\pip\req\req_install.py", line 878, in install
    spinner=spinner,
  File "d:\python361\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess
    line = console_to_str(proc.stdout.readline())
  File "d:\python361\lib\site-packages\pip\compat\__init__.py", line 75, in console_to_str
    return s.decode('utf_8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 111: invalid start byte

Avec twisted :

$> pip install --upgrade twisted
Collecting twisted
  Using cached Twisted-17.1.0.tar.bz2
Requirement already up-to-date: zope.interface>=4.0.2 in d:\python361\lib\site-packages (from twisted)
Requirement already up-to-date: constantly>=15.1 in d:\python361\lib\site-packages (from twisted)
Requirement already up-to-date: incremental>=16.10.1 in d:\python361\lib\site-packages (from twisted)
Requirement already up-to-date: Automat>=0.3.0 in d:\python361\lib\site-packages (from twisted)
Requirement already up-to-date: setuptools in d:\python361\lib\site-packages (from zope.interface>=4.0.2->twisted)
Requirement already up-to-date: six in d:\python361\lib\site-packages (from Automat>=0.3.0->twisted)
Requirement already up-to-date: attrs in d:\python361\lib\site-packages (from Automat>=0.3.0->twisted)
Requirement already up-to-date: packaging>=16.8 in d:\python361\lib\site-packages (from setuptools->zope.interface>=4.0.2->twisted)
Requirement already up-to-date: appdirs>=1.4.0 in d:\python361\lib\site-packages (from setuptools->zope.interface>=4.0.2->twisted)
Requirement already up-to-date: pyparsing in d:\python361\lib\site-packages (from packaging>=16.8->setuptools->zope.interface>=4.0.2->twisted)
Installing collected packages: twisted
  Running setup.py install for twisted ... error
Exception:
Traceback (most recent call last):
  File "d:\python361\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 5: invalid continuation byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\python361\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "d:\python361\lib\site-packages\pip\commands\install.py", line 342, in run
    prefix=options.prefix_path,
  File "d:\python361\lib\site-packages\pip\req\req_set.py", line 784, in install
    **kwargs
  File "d:\python361\lib\site-packages\pip\req\req_install.py", line 878, in install
    spinner=spinner,
  File "d:\python361\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess
    line = console_to_str(proc.stdout.readline())
  File "d:\python361\lib\site-packages\pip\compat\__init__.py", line 75, in console_to_str
    return s.decode('utf_8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 5: invalid continuation byte

pycrypto n'a pas l'air franchement compatible simplement avec Python 3, ça ressemble à un pur produit Python 2 et vu la timeline du projet ça n'est pas prévu de supporter complètement Python 3.

Si tu as le choix, je te conseille plutôt le package "cryptography" pour Python 3.

Bon, en fait pycrypto c'était un exemple, je n'en ai pas besoin.
Je souhaite par contre installer pymodbus3
En fin de ce post, j'ai copié collé l'erreur rencontrée.
Mais je voudrais réellement savoir QUELLE EST L'ORIGINE DE L'EXCEPTION DE PARSING UnicodeDecodeError ? qui est levée à l'exécution de pip lorsque j'installe (tente d'installer) la librarie tierce...

>pip install --no-cache-dir pymodbus3
Collecting pymodbus3
  Downloading pymodbus3-1.0.0.tar.gz (80kB)
    100% |████████████████████████████████| 81kB 998kB/s
Collecting twisted>=12.2.0 (from pymodbus3)
  Downloading Twisted-17.1.0.tar.bz2 (3.0MB)
    100% |████████████████████████████████| 3.0MB 1.3MB/s
Collecting pyserial>=2.6 (from pymodbus3)
  Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
    100% |████████████████████████████████| 194kB 2.6MB/s
Collecting zope.interface>=4.0.2 (from twisted>=12.2.0->pymodbus3)
  Downloading zope.interface-4.3.3.tar.gz (150kB)
    100% |████████████████████████████████| 153kB 2.4MB/s
Collecting constantly>=15.1 (from twisted>=12.2.0->pymodbus3)
  Downloading constantly-15.1.0-py2.py3-none-any.whl
Collecting incremental>=16.10.1 (from twisted>=12.2.0->pymodbus3)
  Downloading incremental-16.10.1-py2.py3-none-any.whl
Collecting Automat>=0.3.0 (from twisted>=12.2.0->pymodbus3)
  Downloading Automat-0.5.0-py2.py3-none-any.whl
Requirement already satisfied: setuptools in d:\python36\lib\site-packages (from zope.interface>=4.0.2->twisted>=12.2.0->pymodbus3)
Collecting attrs (from Automat>=0.3.0->twisted>=12.2.0->pymodbus3)
  Downloading attrs-16.3.0-py2.py3-none-any.whl
Requirement already satisfied: six in d:\python36\lib\site-packages (from Automat>=0.3.0->twisted>=12.2.0->pymodbus3)
Requirement already satisfied: packaging>=16.8 in d:\python36\lib\site-packages (from setuptools->zope.interface>=4.0.2->twisted>=12.2.0->pymodbus3)
Requirement already satisfied: appdirs>=1.4.0 in d:\python36\lib\site-packages (from setuptools->zope.interface>=4.0.2->twisted>=12.2.0->pymodbus3)
Requirement already satisfied: pyparsing in d:\python36\lib\site-packages (from packaging>=16.8->setuptools->zope.interface>=4.0.2->twisted>=12.2.0->pymodbus3)
Installing collected packages: zope.interface, constantly, incremental, attrs, Automat, twisted, pyserial, pymodbus3
  Running setup.py install for zope.interface ... error
Exception:
Traceback (most recent call last):
  File "d:\python36\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 87: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\python36\lib\site-packages\pip\commands\install.py", line 342, in run
    prefix=options.prefix_path,
  File "d:\python36\lib\site-packages\pip\req\req_set.py", line 784, in install
    **kwargs
  File "d:\python36\lib\site-packages\pip\req\req_install.py", line 878, in install
    spinner=spinner,
  File "d:\python36\lib\site-packages\pip\utils\__init__.py", line 676, in call_subprocess
    line = console_to_str(proc.stdout.readline())
  File "d:\python36\lib\site-packages\pip\compat\__init__.py", line 75, in console_to_str
    return s.decode('utf_8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 87: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\python36\lib\site-packages\pip\commands\install.py", line 385, in run
    requirement_set.cleanup_files()
  File "d:\python36\lib\site-packages\pip\req\req_set.py", line 729, in cleanup_files
    req.remove_temporary_source()
  File "d:\python36\lib\site-packages\pip\req\req_install.py", line 977, in remove_temporary_source
    rmtree(self.source_dir)
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 49, in wrapped_f
    return Retrying(*dargs, **dkw).call(f, *args, **kw)
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 212, in call
    raise attempt.get()
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 247, in get
    six.reraise(self.value[0], self.value[1], self.value[2])
  File "d:\python36\lib\site-packages\pip\_vendor\six.py", line 686, in reraise
    raise value
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 200, in call
    attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
  File "d:\python36\lib\site-packages\pip\utils\__init__.py", line 102, in rmtree
    onerror=rmtree_errorhandler)
  File "d:\python36\lib\shutil.py", line 494, in rmtree
    return _rmtree_unsafe(path, onerror)
  File "d:\python36\lib\shutil.py", line 393, in _rmtree_unsafe
    onerror(os.rmdir, path, sys.exc_info())
  File "d:\python36\lib\site-packages\pip\utils\__init__.py", line 114, in rmtree_errorhandler
    func(path)
PermissionError: [WinError 32] Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus: 'C:\\Users\\xxxxx\\AppData\\Local\\Temp\\pip-build-tpy8im01\\zope.interface'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\python36\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "d:\python36\lib\site-packages\pip\commands\install.py", line 385, in run
    requirement_set.cleanup_files()
  File "d:\python36\lib\site-packages\pip\utils\build.py", line 38, in __exit__
    self.cleanup()
  File "d:\python36\lib\site-packages\pip\utils\build.py", line 42, in cleanup
    rmtree(self.name)
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 49, in wrapped_f
    return Retrying(*dargs, **dkw).call(f, *args, **kw)
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 212, in call
    raise attempt.get()
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 247, in get
    six.reraise(self.value[0], self.value[1], self.value[2])
  File "d:\python36\lib\site-packages\pip\_vendor\six.py", line 686, in reraise
    raise value
  File "d:\python36\lib\site-packages\pip\_vendor\retrying.py", line 200, in call
    attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
  File "d:\python36\lib\site-packages\pip\utils\__init__.py", line 102, in rmtree
    onerror=rmtree_errorhandler)
  File "d:\python36\lib\shutil.py", line 494, in rmtree
    return _rmtree_unsafe(path, onerror)
  File "d:\python36\lib\shutil.py", line 384, in _rmtree_unsafe
    _rmtree_unsafe(fullname, onerror)
  File "d:\python36\lib\shutil.py", line 393, in _rmtree_unsafe
    onerror(os.rmdir, path, sys.exc_info())
  File "d:\python36\lib\site-packages\pip\utils\__init__.py", line 114, in rmtree_errorhandler
    func(path)
PermissionError: [WinError 32] Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus: 'C:\\Users\\xxxxx\\AppData\\Local\\Temp\\pip-build-tpy8im01\\zope.interface'

As tu essayé de mettre à jour pip ?

python -m pip install --upgrade --force pip

Oui j'ai essayé de mettre à jour pip mais hélas ça ne change rien.
Par contre j'ai rétrogradé en Python 3.5 (x64 pour Windows) et tout fonctionne.

Je déduis de cette expérience que la toute dernière version dite stable de Python 3 n'est pas toujours supportée pour toutes les libs tierces sous Windows. Mais je n'ai pas le choix que de développer sous Windows pour mes travaux présents.

Mais on arrive toujours à trouver une solution !

...