J'ai téléchargé Microsoft Visual C++ Compiler for Python 2.7 , et l'installer, le chemin complet de vcvarsall.bat
Est:
C:\Users\UserName\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat
Mais le code suivant ne peut pas en renvoyer le chemin:
from distutils import msvc9compiler
msvc9compiler.find_vcvarsall(9.0)
Le programme d'installation n'écrit pas les informations d'installation dans le registre et, à partir du code source de find_vcvarsall()
, il semble qu'il ne trouve pas le fichier vcvarsall.bat
À partir de VS90COMNTOOLS
, car il requiert que le nom du dossier contenant vcvarsall.bat
soit VC
:
productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
Comment puis-je utiliser le compilateur sans modifier le nom de registre ou de dossier?
Mettez à jour setuptools à 6.0 ou supérieur. Dans ces versions, setuptools peut détecter automatiquement le compilateur Microsoft Visual C++ pour Python 2.7 avec le vcvarsall.bat .
Veuillez vous référer à:
Regardez dans le fichier setup.py
Du paquet que vous essayez d'installer. S'il s'agit d'un ancien package, il peut importer distutils.core.setup()
plutôt que setuptools.setup()
.
J'ai rencontré cela (en 2015) avec une combinaison de ces facteurs:
Le compilateur Microsoft Visual C++ pour Python 2.7 de http://aka.ms/vcpython27
Un paquet plus ancien qui utilise distutils.core.setup()
Essayer de faire python setup.py build
Plutôt que d'utiliser pip
.
Si vous utilisez une version récente de pip, cela forcera (monkeypatch) le paquet à utiliser setuptools, même si son setup.py
Appelle distutils. Cependant, si vous n'utilisez pas pip et que vous faites simplement python setup.py build
, Le processus de génération utilisera distutils.core.setup()
, qui ne connaît pas l'emplacement d'installation du compilateur.
Étape 1: Ouvrez l'invite de commandes Visual C++ 2008 appropriée
Ouvrez le menu Démarrer ou l'écran Démarrer et recherchez "Invite de commandes Visual C++ 2008 32 bits" (si votre python est 32 bits) ou "Invite de commandes Visual C++ 2008 64 bits") (si votre python est 64 bits). Exécutez-le. L'invite de commande devrait indiquer Visual C++ 2008 ... dans la barre de titre.
Étape 2: Définir les variables d'environnement
Définissez ces variables d'environnement dans l'invite de commande que vous venez d'ouvrir.
SET DISTUTILS_USE_SDK=1
SET MSSdk=1
Référence http://bugs.python.org/issue23246
Étape 3: Créer et installer
cd
vers le package que vous voulez construire, et exécutez python setup.py build
, puis python setup.py install
. Si vous souhaitez installer sur un virtualenv, activez-le avant de créer.
Christian Long fournit une solution praticable. Mais si vous ne souhaitez pas le modifier dans "Visual C++ 2008 32-bit/64-bit Command" à chaque fois, vous pouvez simplement trouver l'emplacement de "vcvarsall.bat", c'est-à-dire "C:\Users\UserName\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat ", puis modifiez la fonction find_vcvarsall (version) dans Python27\Lib\distutils\msvc9compiler.py
comme ça:
def find_vcvarsall(version):
productdir= "C:/Users/UserName/AppData/Local/Programs/Common/Microsoft/Visual C++ for Python/9.0"
vcvarsall = os.path.join(productdir, "vcvarsall.bat")
if os.path.isfile(vcvarsall):
return vcvarsall
else:
return None
Simple, moche mais utile.
J'avais le même problème avec ce paquet, il semble qu'ils ne l'aient pas vraiment testé avec une installation propre.
Au final, je viens d'ajouter une clé pour créer COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC
puis j'ai ajouté une valeur de chaîne avec le nom productdir
avec la valeur définie sur mon chemin vers vcvarsall.bat, qui était la même que la vôtre.
Mettez à niveau vos setuptools dans la ligne de commande:
pip install --upgrade setuptools
Les dernières versions de setuptools supérieures à 6.0 devraient détecter automatiquement le compilateur Microsoft Visual C++ pour Python 2.7