web-dev-qa-db-fra.com

Compilateur Microsoft Visual C ++ pour Python 2.7

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?

21
HYRY

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 à:

  1. https://pypi.python.org/pypi/setuptools/6.1#id4
  2. https://bitbucket.org/pypa/setuptools/issue/258
24
heronotears

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:

  1. Le compilateur Microsoft Visual C++ pour Python 2.7 de http://aka.ms/vcpython27

  2. Un paquet plus ancien qui utilise distutils.core.setup()

  3. 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.


Solution

É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.

22
Christian Long

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.

8
wuliang8910

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.

5
Daniel Samuels

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

4
alfonso