ข้อผิดพลาด: ไม่พบ vcvarsall.bat


851

ฉันพยายามติดตั้งแพ็กเกจ Python dulwich :

pip install dulwich

แต่ฉันได้รับข้อความแสดงข้อผิดพลาดที่เป็นความลับ:

error: Unable to find vcvarsall.bat

สิ่งเดียวกันจะเกิดขึ้นหากฉันลองติดตั้งแพ็คเกจด้วยตนเอง:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat

6
สำหรับการอ้างอิงในอนาคตมันจะดีที่จะเห็นว่าคุณใช้แพลตฟอร์มนี้
viam0Zah

47
หากคุณคิดว่านี่เป็นข้อความแสดงข้อผิดพลาดที่น่ารำคาญ
Colonel Panic

48
Microsoft เสนอโซลูชัน: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters

6
@MartijnPieters ฉันพยายามดาวน์โหลดและติดตั้งลิงก์ที่คุณให้ไว้กับล้อและ setuptools 7.0 แต่มันไม่ทำงานฉันได้รับข้อความ: C:\Users\User\libfreenect\wrappers\python>python setup.py install running install running build running build_ext building 'freenect' extension error: Unable to find vcvarsall.bat
compski

4
Steve Dower (คนที่อยู่ในทีม Python ของ Microsoft) ได้เขียนโพสต์บล็อกเกี่ยวกับหัวข้อนี้ที่ควรอ่าน: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Cody Piersall

คำตอบ:


683

ปรับปรุง : ความเห็นชี้ให้เห็นว่าคำแนะนำที่นี่อาจเป็นอันตราย ลองใช้รุ่น Visual C ++ 2008 Express หรือคอมไพเลอร์ Microsoft Visual C ++ ที่สร้างขึ้นโดยเฉพาะสำหรับ Python ( รายละเอียด ) และไม่ใช้คำตอบดั้งเดิมด้านล่าง ข้อความแสดงข้อผิดพลาดเดิมหมายถึงไม่ได้ติดตั้ง Visual C ++ รุ่นที่ต้องการ


สำหรับการติดตั้ง Windows:

ในขณะที่ทำงาน setup.py สำหรับการติดตั้งแพคเกจ, Python 2.7 การค้นหาสำหรับติดตั้ง Visual Studio 2008 คุณสามารถหลอกลวงหลามใช้ใหม่ Visual Studio โดยการตั้งค่าเส้นทางที่ถูกต้องในตัวแปรสภาพแวดล้อมก่อนที่จะเรียกVS90COMNTOOLSsetup.py

ดำเนินการคำสั่งต่อไปนี้ตามรุ่นของ Visual Studio ที่ติดตั้ง:

  • Visual Studio 2010 (VS10): SET VS90COMNTOOLS=%VS100COMNTOOLS%
  • Visual Studio 2012 (VS11): SET VS90COMNTOOLS=%VS110COMNTOOLS%
  • Visual Studio 2013 (VS12): SET VS90COMNTOOLS=%VS120COMNTOOLS%
  • Visual Studio 2015 (VS14): SET VS90COMNTOOLS=%VS140COMNTOOLS%

คำเตือน: ดังที่ระบุไว้ด้านล่างคำตอบนี้ไม่สามารถใช้งานได้หากคุณพยายามรวบรวมโมดูลหลาม

ดูBuilding lxml สำหรับ Python 2.7 บน Windowsสำหรับรายละเอียด


21
มันทำให้ฉัน :(
fmuecke

8
@Gili: ดูเหมือนว่าปัญหานี้เกิดจากการเว้นวรรคในตัวแปรลองใส่ในเครื่องหมายคำพูด สำหรับฉัน% VS100COMNTOOLS% = "ไฟล์ C: \ Program (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
ตำนาน 2k

7
สิ่งนี้ใช้ไม่ได้กับหลาย ๆ สิ่งเพราะ Python อาศัย VS2008 ดูคำตอบนี้: stackoverflow.com/questions/6551724/…
shezi

182
คำเตือน!!! นี่คือคำตอบที่ผิด คุณไม่ควรอยู่ภายใต้สถานการณ์ใด ๆ ในการรวบรวมส่วนขยาย Python C โดยใช้คอมไพเลอร์ (เวอร์ชั่นของ) ที่แตกต่างกันซึ่งหนึ่งที่ใช้ในการรวบรวม Python เองเป็นคอมไพเลอร์ทั้งสอง (เวอร์ชั่น) อาจจะมีไลบรารีรันไทม์ C ดูคำตอบนี้สำหรับรายละเอียดเพิ่มเติม
Piotr Dobrogost

72
คุณสามารถดาวน์โหลด Visual C ++ 2008 Express Edition ฟรีได้จากgo.microsoft.com/?linkid=7729279ซึ่งจะตั้งค่าตัวแปรสภาพแวดล้อม VS90COMNTOOLS ในระหว่างการติดตั้งและสร้างด้วยคอมไพเลอร์ที่เข้ากันได้
Eric Smith

225

ฉันพบวิธีแก้ปัญหา ฉันมีปัญหาเดียวกันและข้อผิดพลาดการติดตั้ง 'amara' ฉันติดตั้ง mingw32 แล้ว แต่จำเป็นต้องกำหนดค่า distutils

  1. ฉันมี Python 2.6 ที่ติดตั้งไว้แล้ว
  2. ฉันติดตั้ง mingw32 ไป C:\programs\mingw\
  3. เพิ่มไดเรกทอรี bin mingw32 ของตัวแปรสภาพแวดล้อมของคุณ: ผนวกc:\programs\MinGW\bin;กับเส้นทาง
  4. แก้ไข (สร้างหากไม่มีอยู่) ไฟล์distutils.cfgซึ่งอยู่ที่C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
    
  5. easy_install.exe amaraเรียกใช้ตอนนี้

cmd.exeตรวจสอบให้แน่ใจว่าสภาพแวดล้อมที่มีการตั้งค่าโดยการเปิดใหม่


45
สิ่งนี้ใช้งานได้ดีสำหรับ Python2.6 แต่ด้วยเหตุผลบางอย่างฉันไม่สามารถใช้ Python2.7 มันใช้งานได้ถ้าฉันดาวน์โหลดซอร์สแพ็กเกจและติดตั้งโดยใช้ 'python setup.py install --compile = mingw32' แต่ด้วยเหตุผลบางอย่างที่ใช้ easy_install หรือ pip ยังคงพยายามหา vcvarsall
Jonathan Hartley

2
ในที่สุดฉันก็ได้ scikits.image ที่จะติดตั้งใน Python (x, y) 2.7 โดยการเพิ่มC:\msysgit\mingw\mingw32\binและC:\msysgit\mingw\binไปที่ PATH ของผู้ใช้และทำการรีสตาร์ท Spyder ก่อนที่จะทำงานpip installอีกครั้ง
endolith

20
ไม่จำเป็นต้องเคยที่จะรีบูตเนื่องจากมีการเปลี่ยนแปลงตัวแปรสภาพแวดล้อม การเปิดกระบวนการ cmd.exe ใหม่นั้นเพียงพอแล้ว
Tomalak

11
ฉันยังไม่สามารถแก้ไขได้ นี่เป็นข้อผิดพลาด: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1หลังจากeasy_install.exe amara
ผู้ใช้

5
@ ผู้ใช้คุณควรเปิดไฟล์นี้: C:\Python27\Lib\distutils\cygwincompiler.pyและลบรายการทั้งหมดของ–mno-cygwinมันออก นี่เป็นเพราะ GCC รุ่นล่าสุดได้ลบ–mno-cygwinตัวเลือกและไม่ควรอยู่ที่นั่น
Zeinab Abbasimazar

220

คุณสามารถติดตั้งรุ่นที่คอมไพล์ได้จากhttp://www.lfd.uci.edu/~gohlke/pythonlibs/


15
เพียงแค่ปลาย: คุณสามารถติดตั้งแพคเกจจากเว็บไซต์นี้ใน virtualenv โดยทำงานeasy_install binary_installer_built_with_distutils.exeใน virtualenv, accoding กับคำตอบนี้
yangzh

14
Python Windows ทุกตัวควรรู้เกี่ยวกับสิ่งนี้
นักเรียนมัธยมปลาย

1
คุณยังสามารถwheel convert ....exeติดตั้งเหล่านี้แล้วติดตั้งด้วย pip เมื่อใดก็ตามที่คุณต้องการ
Zooba

3
การจะมีความแม่นยำมากขึ้นlfd.uci.edu/~gohlke/pythonlibs/#mysql-pythonและดาวน์โหลดครั้งเดียวเปิดสถานีเป็นผู้ดูแลและรันpython -m pip install <filename>
อรุณ

แม่ของฮอลลี่ของพระเจ้านี่คือจุดที่ถูกต้อง ได้ผลเหมือนเป็นเสน่ห์ TY :)
อาเมียร์

162

ถ้าคุณต้องการคอมไพล์ด้วย Visual Studio C ++ แทน mingw ...

  1. เรียกใช้python.exeเพื่อแสดงเวอร์ชันของ VC ++ ที่ถูกคอมไพล์ด้วย (ตัวอย่างที่แสดงด้านล่าง)

    มันเป็นสิ่งสำคัญที่จะใช้รุ่นที่สอดคล้องกันของ Visual C ++ คอมไพเลอร์ที่ถูกงูหลามรวบรวมกับตั้งแต่distilutils 's get_build_versionป้องกันการผสมรุ่น ( ต่อคำเตือนของ Piotr )

    • สีเหลือง (บนสุด) คือ Python 2.7 คอมไพล์ด้วย MSC v.1500 (Visual Studio C ++ 2008)
    • สีแดง (ด้านล่าง) คือ Python 3.4.1 รวบรวมด้วย MSC v.1600 (Visual Studio C ++ 2010)

    ตัวอย่างจากบรรทัดคำสั่งที่แสดง Python 2.7 ที่คอมไพล์ด้วย MSC v.1500 และ Python 3.4.1 ที่คอมไพล์ด้วย MSC v.1600

  2. ใช้ตารางด้านล่าง[1]เพื่อจับคู่เวอร์ชัน VC ++ ภายในกับ Visual Studio ที่เกี่ยวข้อง:

    MSC v.1000 -> Visual C++ 4.x        
    MSC v.1100 -> Visual C++ 5          
    MSC v.1200 -> Visual C++ 6          
    MSC v.1300 -> Visual C++ .NET       
    MSC v.1310 -> Visual C++ .NET 2003  
    MSC v.1400 -> Visual C++ 2005  (8.0)
    MSC v.1500 -> Visual C++ 2008  (9.0)
    MSC v.1600 -> Visual C++ 2010 (10.0)
    MSC v.1700 -> Visual C++ 2012 (11.0)
    MSC v.1800 -> Visual C++ 2013 (12.0)
    MSC v.1900 -> Visual C++ 2015 (14.0)
    MSC v.1910 -> Visual C++ 2017 (15.0)
    MSC v.1911 -> Visual C++ 2017 (15.3)
    MSC v.1912 -> Visual C++ 2017 (15.5)
    MSC v.1913 -> Visual C++ 2017 (15.6)
    MSC v.1914 -> Visual C++ 2017 (15.7)
    MSC v.1915 -> Visual C++ 2017 (15.8)
    MSC v.1916 -> Visual C++ 2017 (15.9)   
    
  3. ดาวน์โหลดและติดตั้ง Visual Studio C ++ รุ่นที่สอดคล้องกันจากขั้นตอนก่อนหน้า
    หมายเหตุเพิ่มเติมสำหรับ VC ++ รุ่นที่เฉพาะเจาะจงอยู่ด้านล่าง

    หมายเหตุสำหรับ Visual Studio C ++ 2008

    สำหรับเพียงคอมไพเลอร์ 32 บิตดาวน์โหลดVisual Studio C ++ 2008 Edition

    สำหรับคอมไพเลอร์ 64 บิต[2] [3]ดาวน์โหลดSDK ของ Windows สำหรับ Windows 7 และ NET Framework 3.5 SP1

    • ยกเลิกการเลือกทุกอย่างยกเว้นDeveloper Tools >> Visual C++ Compilersเพื่อประหยัดเวลาและพื้นที่ดิสก์ไม่ให้ติดตั้งเครื่องมือ SDK ที่คุณไม่ต้องการ

    หมายเหตุสำหรับ Visual Studio C ++ 2010

    ตามที่ Microsoft ถ้าคุณติดตั้ง Visual Studio 2010 SP1 มันอาจลบคอมไพเลอร์และไลบรารีสำหรับ VC ++
    หากเป็นกรณีที่ดาวน์โหลดVisual C ++ 2010 SP1 คอมไพเลอร์การปรับปรุง

    หมายเหตุสำหรับ Visual Studio C ++ 2015

    หากคุณไม่จำเป็นต้องใช้ Visual Studio IDE ดาวน์โหลดVisual Studio C ++ 2015 เครื่องมือรูปร่าง

    หมายเหตุสำหรับ Visual Studio C ++ 2017

    หากคุณไม่จำเป็นต้องใช้ Visual Studio IDE ดาวน์โหลดเครื่องมือรูปร่างสำหรับ Visual Studio 2017

    คำแนะนำ : หากคุณมีการติดตั้ง Python 32- บิตและ 64- บิตคุณอาจต้องการใช้virtualenvเพื่อสร้างสภาพแวดล้อม Python แยกต่างหากเพื่อให้คุณสามารถใช้หนึ่งหรืออื่น ๆ ในเวลาโดยไม่ต้องยุ่งกับเส้นทางของคุณเพื่อเลือกรุ่น Python ที่ ใช้.

ตามที่@srodriguexคุณอาจข้ามการโหลดไฟล์แบตช์ (ขั้นตอนที่ 4-6) ด้วยตนเองโดยคัดลอกไฟล์แบตช์สองสามชุดไปที่ที่ Python ค้นหาโดยทำตามคำตอบนี้ หากไม่ได้ผลนี่เป็นขั้นตอนต่อไปนี้ซึ่งใช้งานได้สำหรับฉัน

  1. เปิด cmd.exe

  2. ก่อนที่คุณจะลองติดตั้งสิ่งที่ต้องใช้ส่วนขยาย C ให้รันไฟล์แบตช์ต่อไปนี้เพื่อโหลดสภาพแวดล้อมของคอมไพเลอร์ VC ++ ลงในเซสชัน (เช่นตัวแปรสภาพแวดล้อมพา ธ ไปยังคอมไพเลอร์ ฯลฯ )

    ดำเนินการ:

    • คอมไพเลอร์ 32 บิต:

      หมายเหตุ : การติดตั้ง Windows แบบ 32 บิตจะมีC:\Program Files\ตามที่คาดไว้เท่านั้น

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

    • คอมไพเลอร์ 64 บิต:

      "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars64.bat"

      หมายเหตุ : ใช่พื้นเมือง 64 Program Files (x86)บิตคอมไพเลอร์อยู่ใน อย่าถามฉันทำไม
      นอกจากนี้หากคุณสงสัยว่าความแตกต่างระหว่างvcvars64.batและvcvarsx86_amd64.batหรือที่สำคัญกว่าคือความแตกต่างระหว่างamd64และx86_amd64ก่อนหน้านี้มีไว้สำหรับเครื่องมือคอมไพเลอร์ 64 บิตแบบดั้งเดิมและอันหลังคือคอมไพเลอร์ข้ามแบบ 64 บิตที่สามารถทำงานกับการติดตั้ง Windows 32 บิต .

    อัปเดต:
    หากด้วยเหตุผลบางอย่างที่คุณได้รับerror: ... was unexpected at this time.ซึ่ง...เป็นชุดของอักขระบางตัวคุณต้องตรวจสอบว่าตัวแปรพา ธ ของคุณไม่มีอักขระที่ไม่เกี่ยวข้องใด ๆ เช่นใบเสนอราคาพิเศษหรืออักขระจรจัด ไฟล์แบตช์จะไม่สามารถอัปเดตพา ธ เซสชันของคุณหากไม่สามารถเข้าใจได้ตั้งแต่แรก

  3. หากเป็นไปด้วยดีคุณควรได้รับข้อความใดข้อความหนึ่งต่อไปนี้ขึ้นอยู่กับเวอร์ชันของ VC ++ และคำสั่งที่คุณรัน:

    สำหรับเครื่องมือคอมไพเลอร์ 32 บิต:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    สำหรับเครื่องมือคอมไพเลอร์ 64 บิต:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. ตอนนี้ให้เรียกใช้การตั้งค่าผ่านทางpython setup.py installหรือpip install pkg-name

  5. หวังและข้ามนิ้วของคุณที่ดาวเคราะห์ถูกจัดตำแหน่งอย่างถูกต้องเพื่อให้ VC ++ ให้ความร่วมมือ


ไม่สามารถแนะนำได้มากพอที่คุณจะผ่านความเจ็บปวดจากการเคลื่อนที่ตรงไปที่ 64 บิต ใช้เวลาสักครู่ก่อนที่คุณจะต้องการพื้นที่ที่อยู่มากกว่า 4gb ฉันพูดจากประสบการณ์ที่เจ็บปวดหลังจากหายไป 32 บิตเพราะมันง่ายกว่ามากจากนั้นต้องถอนการติดตั้งทุกอย่างรวมถึงการขึ้นต่อกันและไป 64 บิต เกือบตลอดทั้งสัปดาห์
โทมัสบราวน์

1
จากนั้นอีกครั้งฉันลืมไปว่ามีกี่คนที่จะต้องใช้ Python สำหรับงานที่ใหญ่กว่าเช่นนั้น และ @ThomasBrowne ฉันแน่ใจว่านั่นเป็นประสบการณ์ที่เจ็บปวดและไม่จำเป็น ฉันกำลังมองหามันและหวังว่าฉันจะหาอะไรได้ ปัญหาหลักคือ Visual Studio C ++ 2008 Express ไม่ได้มาพร้อมกับคอมไพเลอร์ 64 บิต แต่ฉันแน่ใจว่ามันอยู่แถวนี้
Josh Bowden

เพิ่งอัปเดตพร้อมข้อมูลเพิ่มเติมที่ครอบคลุมถึงวิธีรับคอมไพเลอร์ 64 บิตหากคุณต้องการ
Josh Bowden

ในกรณีของฉันฉันทำตามขั้นตอนที่ 1 ด้านบนและข้ามส่วนที่เหลือตามคำตอบนี้ ตอนนี้ฉันสามารถติดตั้งแพคเกจเพื่อหลีกเลี่ยงความรำคาญในการเรียกใช้. bat
srodriguex

@srodriguex ดีในกรณีที่ดูเหมือนว่างูหลามคือสมมติว่าเครื่องมือคอมไพเลอร์ 64 บิตได้รับการโหลดเข้ามาในเส้นทางโดยใช้ว่ามันคือการมองหาและ...\VC\bin\vcvarsamd64.bat ...\VC\bin\amd64\vcvarsamd64.bat
Josh Bowden

73

เกิดอะไรขึ้น? โมดูล Python สามารถเขียนด้วยภาษา C หรือ C ++ (สำหรับความเร็ว) หากคุณพยายามติดตั้งแพ็กเกจดังกล่าวด้วย Pip (หรือsetup.py) จะต้องทำการรวบรวม C / C ++ จากแหล่งที่มา ออกกล่อง Pip จะโจ่งแจ้งคุณรวบรวม Microsoft Visual C ++ ที่ติดตั้ง หากคุณไม่มีคุณจะเห็นข้อความแสดงข้อผิดพลาด "ข้อความผิดพลาด: ไม่พบ vcvarsall.bat"

ทางออกที่กำหนดคือการติดตั้งคอมไพเลอร์ C / C ++ ทั้ง Microsoft Visual C ++ หรือMinGW (โครงการโอเพนซอร์ซ) อย่างไรก็ตามการติดตั้งและกำหนดค่าอาจทำได้ยาก (แก้ไข 2014: Microsoft ได้เผยแพร่คอมไพเลอร์ C ++พิเศษสำหรับ Python 2.7)

ทางออกที่ง่ายที่สุดคือการใช้โปรแกรมติดตั้ง Windows (.msi) ของ Christoph Gohlke สำหรับแพ็คเกจ Python ยอดนิยม เขาสร้างตัวติดตั้งสำหรับ Python 2.x และ 3.x, 32 บิตและ 64 บิต คุณสามารถดาวน์โหลดได้จากhttp://www.lfd.uci.edu/~gohlke/pythonlibs/


หากคุณคิดเช่นกันว่า "ข้อผิดพลาด: ไม่สามารถค้นหา vcvarsall.bat" เป็นข้อความที่น่าหัวเราะและไร้ประโยชน์โปรดแสดงความคิดเห็นเกี่ยวกับข้อผิดพลาดที่http://bugs.python.org/issue2943เพื่อแทนที่ด้วยประโยชน์ที่มากขึ้นและผู้ใช้ - ข้อความที่เป็นมิตร

สำหรับการเปรียบเทียบ Ruby มาพร้อมกับ Gem Manager แพ็คเกจและเสนอคอมไพเลอร์ C / C ++ เสมือนจริงอย่างเป็นทางการคือ DevKit หากคุณพยายามติดตั้งแพคเกจโดยไม่ต้องใช้คุณจะเห็นข้อความที่เป็นประโยชน์ที่เป็นประโยชน์นี้:

โปรดอัปเดต PATH ของคุณเพื่อรวมเครื่องมือสร้างหรือดาวน์โหลด DevKit จากhttp://rubyinstaller.org/downloadsและทำตามคำแนะนำที่http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

คุณสามารถอ่านคุยโวเกี่ยวกับการบรรจุภัณฑ์ Python ที่https://stackoverflow.com/a/13445719/284795


ฉันจะใช้ pip เพื่อติดตั้งไฟล์เรียกทำงานที่รวบรวมไว้ล่วงหน้านี้ในสภาพแวดล้อมเสมือนจริงของฉันได้อย่างไร
Shailen

@shailenTJ เป็นคำถามที่ดี ฉันไม่เคยทำเลย แต่ลองใช้ stackoverflow.com/a/5442340/284795
Colonel Panic

นี่เป็นทางออกที่ดีที่สุด / ง่ายที่สุดที่ฉันรู้ ขอบคุณ
user1477388

นั่นแก้ไข 2014เป็นคำตอบที่ดีที่สุดสำหรับฉัน ง่ายต่อการเรียนการสอนพลาด: ให้แน่ใจว่าคุณอัปเดตsetuptoolsกับรุ่นหรือสูงกว่าด้วย6.0 pip install setuptools --upgrade
orlade

64

คุณจะต้องติดตั้งคอมไพเลอร์ Microsoft ซึ่งเข้ากันได้กับคอมไพเลอร์ที่ใช้สร้าง Python ซึ่งหมายความว่าคุณต้องการ Visual C ++ 2008 (หรือใหม่กว่าโดยมีการปรับแต่งเล็กน้อย)

ไมโครซอฟท์ขณะนี้วัสดุคอมไพเลอร์รวมและส่วนหัวเพียงเพื่อให้สามารถรวบรวมนามสกุลหลามที่ URL ที่น่าจดจำ:

Microsoft Visual C ++ Compiler สำหรับ Python 2.7

http://aka.ms/vcpython27

นี่เป็นแพ็คเกจที่ค่อนข้างเล็ก ดาวน์โหลดได้ 85MB, ติดตั้งได้โดยไม่ต้องใช้สิทธิ์ของผู้ดูแลระบบ, ไม่ต้องบูตเครื่องใหม่ ชื่อนี้สร้างความเข้าใจผิดเล็กน้อยคอมไพเลอร์จะทำงานกับ Python เวอร์ชั่นใด ๆ ที่คอมไพล์ด้วย Visual C ++ 2008 ไม่ใช่แค่ Python 2.7

หากคุณเริ่มต้นพรอมต์แบบโต้ตอบหรือพิมพ์ของ Python ให้sys.versionค้นหาMSCสตริงเวอร์ชัน ถ้าเป็นMSC v.1500คุณสามารถใช้เครื่องมือนี้

จากการประกาศเริ่มต้นจนถึงรายการ distutils :

Microsoft ได้เปิดตัวแพ็คเกจคอมไพเลอร์สำหรับ Python 2.7 เพื่อให้ผู้คนสามารถสร้างและแจกจ่ายโมดูลส่วนขยาย C บน Windows ได้ง่ายขึ้น คอมไพเลอร์ Microsoft Visual C ++ สำหรับ Python 2.7 (aka VC9) มีให้ที่: http://aka.ms/vcpython27

แพคเกจนี้ประกอบด้วยเครื่องมือและส่วนหัวทั้งหมดที่จำเป็นในการสร้างโมดูลส่วนขยาย C สำหรับ Python 2.7 32- บิตและ 64- บิต (โปรดทราบว่าโมดูลส่วนขยายบางอย่างจำเป็นต้องพึ่งพาบุคคลที่สามเช่น OpenSSL หรือ libxml2 ที่ไม่รวมอยู่) รุ่นอื่น ๆ ของ Python ที่สร้างด้วย Visual C ++ 2008 ได้รับการสนับสนุนด้วยเช่นกันดังนั้น "Python 2.7" เป็นเพียงการโฆษณา - มันจะทำงานได้ดีกับ 2.6 และ 3.2

โปรดทราบว่าคุณต้องติดตั้งsetuptools6.0 หรือใหม่กว่า (แสดงอยู่ในข้อกำหนดของระบบในหน้าดาวน์โหลด) โครงการที่คุณกำลังติดตั้งต้องใช้setuptools.setup()ไม่ใช่distutilsหรือการตรวจจับอัตโนมัติจะไม่ทำงาน

Microsoft ระบุว่าพวกเขาต้องการรักษา URL ให้คงที่เพื่อให้สคริปต์อัตโนมัติสามารถอ้างอิงได้อย่างง่ายดาย


2
ตามความคิดเห็นอื่น ๆ ของฉันคุณสามารถมั่นใจได้ว่าจะขึ้นอยู่กับวันที่มีsetuptools pip install setuptools --upgrade
orlade

ฉันได้พิจารณาถึงเหตุผลที่เหตุผลที่เกี่ยวข้องมีความสำคัญsetuptoolsมากกว่าdistutils- หลังจากทั้งหมดโมดูลอาคารเป็นหน้าที่หลักและมีรหัสที่เกี่ยวข้อง แต่เป็นรุ่นที่เก่ากว่า ดูเหมือนว่าผู้distutilsดูแลจะยอมแพ้ในการสนับสนุนรูปแบบ MSSDK ที่เป็นไปได้ทั้งหมดและทิ้งงานนี้ไปยังsetuptoolsเพื่อนร่วมงานที่มีความกระตือรือร้นมากขึ้น
ivan_pozdeev

1
@ivan_pozdeev: setuptoolsสามารถปล่อยได้บ่อยกว่าdistutilsรวมอยู่ในวงจรการเปิดตัว Python และdistitutilsได้เข้าสู่โหมดการบำรุงรักษาอย่างแน่นอนด้วยการทำงานกับระบบใหม่ที่กำหนดไว้เพื่อแทนที่ ทำงานจนตรอกแทน
Martijn Pieters

cython ใช้ distutils คุณจะต้องนำเข้า setuptools ซึ่งตัวกลั่นกรอง Monkey: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa

54

ฉันเพิ่งมีปัญหาเดียวกันนี้ดังนั้นฉันจะเล่าเรื่องของฉันที่นี่โดยหวังว่าจะช่วยคนอื่นด้วยปัญหาเดียวกันและช่วยพวกเขาสองสามชั่วโมงที่ฉันเพิ่งใช้ไป:

ฉันมี mingw (g ++ (GCC) 4.6.1) และ python 2.7.3 ในกล่อง windows 7 และฉันพยายามติดตั้ง PyCrypto

ทุกอย่างเริ่มต้นด้วยข้อผิดพลาดนี้เมื่อเรียกใช้ setup.py ติดตั้ง:

error: Unable to find vcvarsall.bat

แก้ไขได้อย่างง่ายดายหลังจาก googling ข้อผิดพลาดโดยระบุ mingw เป็นคอมไพเลอร์ของตัวเลือก:

setup.py install build --compiler=mingw32

ปัญหาคือว่าแล้วฉันได้รับข้อผิดพลาดที่แตกต่างกัน:

configure: error: cannot run C compiled programs.

ปรากฎว่าแอนตี้ไวรัสของฉันกำลังบล็อกการดำเนินการของ. exe ที่คอมไพล์ใหม่ ฉันเพิ่งปิดการใช้งาน "ระบบป้องกันไวรัส" และไปที่ข้อผิดพลาดถัดไป:

cc1.exe: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1

วิธีนี้แก้ไขได้: "ติดตั้ง MinGW เวอร์ชันที่เก่ากว่าเล็กน้อยหรือแก้ไข distutils \ cygwinccompiler.py ในไดเรกทอรี Python ของคุณเพื่อลบอินสแตนซ์ทั้งหมดของ -mno-cygwin" (จากที่นี่ )

ตอนนี้ฉันสามารถเริ่มทำงานได้ในที่สุด


7
คุณจะต้องใช้ไลบรารี Python รุ่นที่เข้ากันได้กับ MinGW ดูeli.thegreenplace.net/2008/06/28/…สำหรับข้อมูลเพิ่มเติม
Gili

บิดและเปลี่ยน: D
Xilpex

23

ดูเหมือนว่ามันกำลังมองหาคอมไพเลอร์ VC ดังนั้นคุณสามารถลองพูดถึงคอมไพเลอร์ด้วย-c mingw32เพราะคุณมี msys

python setup.py install -c mingw32

16
เพียงเพื่อ clairify คำสั่งที่ทำงานคือ: python setup.py build --compiler=mingw32ตามด้วยpython setup.py install
Emil Stenström

หลังจากรัน python setup.py build --compiler = mingw32 ฉันได้รับ ImportError: ไม่มีโมดูลชื่อ Cython.Distutils ในขณะที่ Cython ติดตั้งภายใต้ Anaconda ข้อเสนอแนะใด ๆ
Serendipity

20

ฉันมี python 2.73 และ windows 7 วิธีแก้ปัญหาสำหรับฉันคือ:

  1. เพิ่มไดเร็กทอรี bin ของ mingw32 ให้กับตัวแปรสภาพแวดล้อม: ผนวกPATHด้วยC:\programs\mingw\bin;
  2. สร้างdistutils.cfgซึ่งอยู่ที่C:\Python27\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

หากต้องการจัดการกับ MinGW ที่ไม่รู้จักแฟล็ก -mno-cygwin อีกต่อไปให้ลบการตั้งค่าสถานะใน C: \ Python27 \ Lib \ distutils \ cygwincompiler.py บรรทัด 322 ถึง 326 ดังนั้นจึงมีลักษณะดังนี้:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))

15

ดูในsetup.pyไฟล์แพ็คเกจที่คุณพยายามติดตั้ง ถ้ามันเป็นแพคเกจที่มีอายุมากกว่าก็อาจจะนำเข้ามากกว่าdistutils.core.setup()setuptools.setup()

ฉันวิ่งเข้าไปในนี้ (ในปี 2015) ด้วยการรวมกันของปัจจัยเหล่านี้

  1. คอมไพเลอร์ Microsoft Visual C ++ สำหรับ Python 2.7 จากhttp://aka.ms/vcpython27

  2. แพ็คเกจเก่าที่ใช้ distutils.core.setup()

  3. พยายามที่จะทำมากกว่าการใช้python setup.py buildpip

ถ้าคุณใช้ pip รุ่นล่าสุดมันจะบังคับ (monkeypatch) แพ็คเกจให้ใช้ setuptools แม้ว่ามันจะsetup.pyเรียก distutils อย่างไรก็ตามหากคุณไม่ได้ใช้ pip และเพิ่งจะทำpython setup.py buildกระบวนการสร้างจะใช้distutils.core.setup()ซึ่งไม่ทราบเกี่ยวกับตำแหน่งการติดตั้งคอมไพเลอร์


สารละลาย

ขั้นตอนที่ 1:เปิดพร้อมรับคำสั่ง Visual C ++ 2008 ที่เหมาะสม

เปิดเมนูเริ่มหรือหน้าจอเริ่มและค้นหา "พรอมต์คำสั่ง 32 บิต Visual c ++ 2008" (ถ้าหลามของคุณเป็น 32 บิต) หรือ "พรอมต์คำสั่ง 64 บิต Visual Visual C ++ 2008" (ถ้าหลามของคุณเป็น 64 บิต) . เรียกใช้ พรอมต์คำสั่งควรพูด Visual C ++ 2008 ... ในแถบชื่อเรื่อง

ขั้นตอนที่ 2:ตั้งค่าตัวแปรสภาพแวดล้อม

ตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ในพร้อมท์คำสั่งที่คุณเพิ่งเปิด

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

การอ้างอิงhttp://bugs.python.org/issue23246

ขั้นตอนที่ 3:สร้างและติดตั้ง

cdแพคเกจที่คุณต้องการที่จะสร้างและเรียกใช้แล้วpython setup.py build python setup.py installหากคุณต้องการติดตั้งใน virtualenv ให้เปิดใช้งานก่อนที่คุณจะสร้าง


คุณสามารถสร้างแพ็คเกจโดยใช้ <code> pip </code> แทน <code> python setup.py build </code>
aronadaal

9

บางทีใครบางคนอาจจะสนใจต่อไปนี้เหมาะกับฉันสำหรับแพ็คเกจ py2exe (ฉันมี windows 7 64 บิตและ python 2.7 แบบพกพา Visual Studio 2005 Express พร้อม Windows SDK สำหรับ Windows 7 และ. NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

แล้ว:

python.exe setup.py install

ไม่คุณพูดถูกฉันไม่แน่ใจว่าเกิดอะไรขึ้นฉันจะลบความคิดเห็นเดิม
Dave Challis

1
มีประโยชน์มาก!! ในกรณีของฉันฉันได้ตั้ง 'set VS90COMNTOOLS =% VS110COMNTOOLS%'
jrvidotti

@Exzile: ใช่คุณพิมพ์คำสั่งเหล่านี้ในเซสชันพรอมต์คำสั่งเดียวกัน
Stefano Fenu

อย่าทำอย่างนี้!!! ดูคำตอบนี้สำหรับรายละเอียดเพิ่มเติม
ไม่ระบุชื่อ

8

ฉันใช้เวลาเกือบ 2 วันในการหาวิธีแก้ไขปัญหานี้ใน python ของฉันรุ่น 3.4 64 บิต: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 กุมภาพันธ์ 2558, 22:44:40) [MSC v.1600 64 บิต (AMD64 )] บน win32

โซลูชัน 1 แข็ง: (ก่อนอ่านสิ่งนี้อ่านโซลูชันแรก 2 ด้านล่าง) สุดท้ายนี่คือสิ่งที่ช่วยฉัน:

  1. ติดตั้งExpress C ++ 2010 Express
  2. ติดตั้งMicrosoft Windows SDK v7.1 สำหรับ Windows 7
  3. สร้างไฟล์ด้วยตนเองvcvars64.batในC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64ซึ่งมีCALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64หรือเส้นทางอื่น ๆ ขึ้นอยู่กับที่คุณมีคุณติดตั้ง
  4. (ดูเหมือนว่าจะเป็นตัวเลือก) ติดตั้งMicrosoft Visual Studio 2010 Service Pack 1พร้อมกับMicrosoft Visual C ++ 2010 Service Pack 1 Compiler Update สำหรับ Windows SDK 7.1
  5. หลังจากนั้นฉันพยายามpip install numpyแต่ได้รับข้อผิดพลาดต่อไปนี้:

    File "numpy\core\setup.py", line 686, in get_mathlib_info
    raise RuntimeError("Broken toolchain: cannot link a simple C program")
    RuntimeError: Broken toolchain: cannot link a simple C program

    ฉันเปลี่ยนmfinfoเป็นNoneในC:\Python34\Lib\distutils\msvc9compiler.pyต่อhttps://stackoverflow.com/a/23099820/4383472นี้

  6. ในที่สุดหลังจากpip install numpyคำสั่งโปรแกรมป้องกันไวรัส avast ของฉันพยายามเข้าไปยุ่งเกี่ยวกับกระบวนการติดตั้ง แต่ฉันปิดการใช้งานอย่างรวดเร็ว

ใช้เวลานานมาก - หลายนาทีในการรวบรวมข้อมูลฉันคิดว่ามีข้อผิดพลาด แต่ในที่สุดทุกอย่างก็โอเค

โซลูชันที่ 2 ง่าย: (ฉันรู้ว่าวิธีนี้ได้รับการกล่าวถึงแล้วในคำตอบที่ได้รับการโหวตอย่างสูงแต่ให้ฉันทำซ้ำเพราะมันง่ายกว่าจริง ๆ ) หลังจากผ่านงานทั้งหมดนี้ฉันเข้าใจว่าวิธีที่ดีที่สุดสำหรับฉันคือ ไบนารีที่คอมไพล์แล้วจากhttp://www.lfd.uci.edu/~gohlke/pythonlibs/ในอนาคต มีโอกาสน้อยมากที่ฉันจะต้องใช้แพ็คเกจ (หรือแพ็คเกจ) ซึ่งไซต์นี้ไม่มี กระบวนการติดตั้งนี้เร็วกว่ามากเช่นกัน ตัวอย่างเช่นการติดตั้งnumpy:

  1. donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(ถ้าคุณมี Python 3.4 64 บิต) จากไซต์นั้น
  2. ใน command prompt หรือ powershell ติดตั้งด้วย pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(หรือพา ธ เต็มไปยังไฟล์ขึ้นอยู่กับวิธีเปิด command command)

numpy ‑ 1.9.2 + mkl ‑ cp34 ‑ none ‑ win_amd64.whl - ไม่พบไฟล์นี้ในลิงค์ด้านบน
Amresh Giri

7

ฉันต้องการเรียกใช้ pysph บน Windows 10 ภายใต้ Python 2.7 และไม่พบ vcvarsall.bat (จาก distutils)

ทางออกของฉันคือต่อไปนี้:

ติดตั้ง Microsoft Visual C ++ สำหรับ Python 2.7 (เช่นแนะนำ @Michael)

ติดตั้งลงใน Windows 10 แล้ว (ชื่อผู้ใช้ของฉันคือ Andreas):

C:\Users\Andreas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

ตั้งค่าตัวแปรสภาพแวดล้อมVS90COMNTOOLSเป็นเส้นทางการติดตั้งของ Visual C ++ สำหรับ Python 2.7 (ดูเส้นทางด้านบน)

หากยังไม่สามารถใช้งานได้ให้แก้ไขในโมดูล

C:/Python27/lib/distutils

ไฟล์msvc9compiler.py ค้นหาในฟังก์ชันfind_vcvarsallและทำการแก้ไขตาม

แทนที่บรรทัด:

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

กับ

productdir = os.path.join(toolsdir)

นี่คือที่ vcvarsall.bat ตั้งอยู่ในกรณีของฉัน (ตรวจสอบที่ vcvarsall.bat อยู่ในการติดตั้งของคุณ)


ที่น่าสนใจก็%userprofile%\Appdata\Local\Programs\Commonคือว่างเปล่าสำหรับฉัน
Bryce Guinta

แม้หลังจากติดตั้ง Microsoft Visual C ++ สำหรับ Python 2.7 แล้ว
chiefenne

7

ฉันพบปัญหานี้เมื่อฉันพยายามติดตั้งไลบรารี numpy บน python 3.5 ทางออกคือการติดตั้ง VS2015 ฉันมี VS2008, 2012, 2013 ซึ่งไม่สามารถใช้งานได้กับ python 3.5 หลามรุ่นที่ใหม่กว่าเห็นได้ชัดว่ามีการพึ่งพา VS รุ่นที่ใหม่กว่า

ตรวจสอบให้แน่ใจด้วยว่ามีการติดตั้งเครื่องมือทั่วไป C ++ ด้วย Visual Studio

ป้อนคำอธิบายรูปภาพที่นี่


6

ฉันลองคำตอบทั้งหมดข้างต้นและพบว่าพวกเขาไม่ทำงานนี่อาจเป็นเพราะฉันใช้ Windows 8 และติดตั้ง Visual Studio 2012 ในกรณีนี้นี่คือสิ่งที่คุณทำ

vcvarsall.batไฟล์จะอยู่ที่นี่: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

เพียงเลือกไฟล์และคัดลอก

จากนั้นไปที่ไดเรกทอรีนี้: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

และวางไฟล์ จากนั้นทุกอย่างควรจะดี


ไม่มีทั้งหมดฉันทำตามคำตอบของคุณไม่ดี แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน
Stupid_Intern

6

คุณสามารถดาวน์โหลด Visual C ++ 2008 Express Edition ฟรีได้จากhttp://go.microsoft.com/?linkid=7729279ซึ่งจะตั้งค่าตัวแปรสภาพแวดล้อม VS90COMNTOOLS ในระหว่างการติดตั้งและสร้างด้วยคอมไพเลอร์ที่เข้ากันได้

@PiotrDobrogost ที่กล่าวถึงในความคิดเห็นคำตอบของเขาสำหรับคำถามอื่น ๆ นี้มีรายละเอียดเกี่ยวกับสาเหตุที่ Visual C ++ 2008 เป็นสิ่งที่ถูกต้องในการสร้าง แต่สิ่งนี้สามารถเปลี่ยนแปลงได้เมื่อ Windows สร้าง Python ย้ายไปเป็น Visual Studio รุ่นใหม่: Building lxml สำหรับ Python 2.7 บน Windows


ตรวจสอบให้แน่ใจว่าไม่มีเวอร์ชั่นอื่นติดตั้งอยู่ ฉันมีปัญหากับเรื่องนี้ ฉันฟอร์แมตคอมพิวเตอร์ใหม่และติดตั้งเฉพาะรุ่นนี้ เนื่องจากการลบ VS หลายเวอร์ชันทำให้ฉันต้องใช้เวลานาน
jmunsch

6

ฉันมีปัญหานี้โดยใช้Python 3.4.1 บน Windows 7 x64และน่าเสียดายที่แพ็คเกจที่ฉันต้องการไม่มี exe หรือล้อที่เหมาะสมที่ฉันสามารถใช้ได้ ระบบนี้ต้องการ 'การแก้ไขปัญหา' สองสามอย่างซึ่งมีรายละเอียดด้านล่าง (และTLDR ที่ด้านล่าง )

เมื่อใช้ข้อมูลในคำตอบของ Jaxrtech ข้างต้นฉันคิดว่าฉันต้องการ Visual Studio C ++ 2010 (sys.version return MSC v.1600) ดังนั้นฉันจึงติดตั้ง Visual C ++ 2010 Express จากลิงก์ในคำตอบของเขาซึ่งเป็นhttp://go.microsoft .com ฉันติดตั้งทุกอย่างพร้อมอัปเดต แต่คุณสามารถอ่านได้ด้านล่างนี่เป็นข้อผิดพลาด ควรติดตั้ง Express เวอร์ชันดั้งเดิมเท่านั้นในขณะนี้ (ไม่มีสิ่งใดที่อัปเดต)

vcvarsall.bat ตอนนี้ปัจจุบัน query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']แต่ก็มีข้อผิดพลาดใหม่เมื่อการติดตั้งแพคเกจ มีคำถาม stackoverflow อื่น ๆ ที่มีข้อผิดพลาดนี้เช่นข้อผิดพลาดขณะสร้าง / ติดตั้งโมดูล C สำหรับ Python 2.7

ฉันพิจารณาจากคำตอบนั้นว่า 2010 Express ติดตั้งคอมไพเลอร์ 32 บิตเท่านั้น ในการรับคอมไพเลอร์ 64 บิต (และอื่น ๆ ) คุณจะต้องติดตั้ง Windows 7.1 SDK ดูhttp://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

installation failed with return code 5100นี้จะไม่ติดตั้งสำหรับฉันแม้ว่าและติดตั้งกลับข้อผิดพลาด ผมพบว่าวิธีการแก้ปัญหาที่ลิงค์ต่อไปนี้: http://support.microsoft.com/kb/2717426 กล่าวโดยย่อถ้ามีการติดตั้ง x86 และ x64 Microsoft Visual C ++ 2010 Redistributable รุ่นใหม่กว่านั้นจะขัดแย้งกับสิ่งที่อยู่ในตัวติดตั้ง SDK และต้องถอนการติดตั้งก่อน

SDK ติดตั้งแล้ว แต่ฉันสังเกตว่า vcvars64.bat ยังคงไม่มีอยู่C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\binหรือโฟลเดอร์ย่อย vcvarsall.bat เรียกใช้ไฟล์แบตช์ vcvars64 ดังนั้นหากไม่มีแพ็กเกจหลามยังคงไม่ติดตั้ง (ฉันลืมข้อผิดพลาดที่แสดงในตอนนี้)

ฉันพบคำแนะนำบางอย่างที่นี่: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 ทำ ตามคำแนะนำฉันติดตั้ง Express SDK 7.1 แล้วและ 7.1 SDK การแก้ไขไฟล์ส่วนหัวหายไป จากนั้นผมก็สร้างด้วยตนเอง vcvars64.bat CALL setenv /x64กับเนื้อหา ฉันจะวางคำแนะนำเหล่านี้ทั้งหมดที่นี่เพื่อให้พวกเขาไม่หลงทาง

ขั้นตอนที่ 1 คือการดาวน์โหลด Visual Studio Express 2010

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express เป็นจุดเริ่มต้นที่ดี ดาวน์โหลดตัวติดตั้งและเรียกใช้ (vc_web.exe) คุณไม่จำเป็นต้องดาวน์โหลด SQL 2008 เพิ่มเติม

คุณจะต้องใช้ Windows SDK (ปัจจุบัน 7.1) สำหรับคอมไพเลอร์ 64 บิต - ยกเว้นว่าคุณต้องการสร้างบิลด์ 32 บิตเท่านั้นซึ่งไม่รองรับอย่างเต็มที่ ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279เป็นจุดเริ่มต้นที่ดีในการดาวน์โหลดสิ่งนี้ - คุณจะต้องเรียกใช้ winsdk_web.exe เมื่อดาวน์โหลด!

การติดตั้งเริ่มต้นที่นี่ก็ใช้ได้

สุดท้ายให้ดาวน์โหลดและติดตั้งการอัปเดต Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

และเพื่อแก้ไขไฟล์ส่วนหัวหายไป VS2010 SP1 http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

และเลือดนรกแก้ไขไฟล์แบตช์ที่หายไปสำหรับ VS2010 Express นี่เป็นเรื่องไร้สาระอย่างสมบูรณ์

ใน C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 สร้าง "vcvars64.bat" ด้วยข้อมูลต่อไปนี้ (คุณจะต้องใช้งานในฐานะผู้ดูแลระบบ):

CALL setenv / x64

แพคเกจหลามของฉันยังไม่ได้ติดตั้ง (ไม่สามารถเรียกคืนข้อผิดพลาด) ฉันพบคำแนะนำ (คัดลอกด้านล่าง) เพื่อใช้ SDK พร้อมรับคำสั่งพิเศษ 7.1 โปรดดูที่: https://mail.python.org/pipermail/distutils-sig/2012-F กุมภาพันธ์/018300.html

ไม่เป็นไรคำถามนี้ บางคนที่นี่สังเกตเห็นรายการนี้ในเมนู: เริ่ม -> โปรแกรมทั้งหมด -> Microsoft Windows SDK v7.1 -> พร้อมรับคำสั่งของ Windows SDK 7.1

สิ่งนี้จะรันงานแบ็ตช์ที่ปรากฏขึ้นเพื่อตั้งค่าสภาพแวดล้อมการทำงานสำหรับคอมไพเลอร์ จากพรอมต์นั้นคุณสามารถพิมพ์ "setup.py build" หรือ "setup.py install"

ฉันเปิดพร้อมรับคำสั่งของ Windows SDK 7.1 ตามคำแนะนำและใช้เพื่อเรียกใช้ easy_install บนแพ็กเกจหลาม และในที่สุดความสำเร็จ!


TLDR ;

  1. ติดตั้ง Visual Studio Express 2010 (โดยเฉพาะอย่างยิ่งโดยไม่มีการแจกจ่ายซ้ำหรือเซิร์ฟเวอร์ SQL ที่ปรับปรุง)
  2. ติดตั้ง Windows 7.1 SDK
  3. การอัปเดต Instal SDK 7.1 SP1 และการแก้ไขไฟล์ส่วนหัว VS2010 SP1 (อาจไม่จำเป็นต้องทำตามขั้นตอนนี้)
  4. สร้างด้วยตนเองC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batด้วยเนื้อหาCALL setenv /x64
  5. Start-> All Programs-> Microsoft Windows SDK v7.1 -> พรอมต์คำสั่งของ Windows SDK 7.1 เพื่อเปิดพรอมต์คำสั่ง x64 พิเศษซึ่งสามารถใช้กับ python / easy_install / pip / etc (รวมถึง virtual_envs)

4

ด้านล่างขั้นตอนแก้ไขปัญหานี้ให้ฉันฉันพยายามสร้างการตั้งค่าด้วยส่วนขยาย cython

  1. ติดตั้ง Microsoft Visual C ++ Compiler สำหรับ Python 2.7
  2. ตำแหน่งการติดตั้งเริ่มต้นจะเป็น @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ สำหรับ Python นี่อาจแก้ไขปัญหาได้จริงทดสอบหนึ่งครั้งก่อนดำเนินการต่อ
  3. หากล้มเหลวให้ตรวจสอบว่าอยู่ใน VC ++ สำหรับไฟล์ python vcvarsall.bat หรือไม่
  4. เปิดไฟล์ msvc9compiler.py ของแพ็คเกจ distutils ใน notepad
  5. ในกล่องของฉันนี่คือ @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py ฟังก์ชั่น find_vcvarsall ในไฟล์นี้กำหนดเวอร์ชันของ VC โดยพิมพ์อาร์กิวเมนต์เวอร์ชัน สำหรับ Python 2.7 มีแนวโน้มที่จะเป็น 9.0
  6. ตอนนี้สร้างตัวแปรสภาพแวดล้อม VS90COMNTOOLS ชี้ไปที่ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ สำหรับ Python \ 9.0 \ VC \ bin
  7. ด้วยเหตุผลบางอย่าง distutils คาดว่าไฟล์ vcvarsall.bat จะอยู่ใน VC dir แต่ VC ++ สำหรับเครื่องมือหลามมีอยู่ในรูทของ 9.0 หากต้องการแก้ไขสิ่งนี้ให้ลบ "VC" ออกจาก path.join (ประมาณเส้น 247)

    #productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") productdir = os.path.join(toolsdir, os.pardir, os.pardir)

ขั้นตอนข้างต้นแก้ไขปัญหาให้ฉันได้


ฉันได้รับการเชื่อมโยงข้อผิดพลาดในการทำตามขั้นตอนข้างต้น LINK: ข้อผิดพลาด LNK2001: สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib: ข้อผิดพลาดร้ายแรง LNK1120: 1 ข้อผิดพลาดภายนอกที่ไม่ได้แก้ไข: คำสั่ง 'C: \\ Users \\ ma306477 \\ AppData \\ Local \\ Programs \\ สามัญ \\ Microsoft \\ Visual C ++ สำหรับ Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'ล้มเหลวด้วยสถานะออก 1120
manish Prasad

3

ฉันลองใช้วิธีแก้ไขปัญหาหลายอย่าง แต่ใช้งานได้เพียงตัวเดียวเท่านั้นการติดตั้ง Microsoft Visual Studio 2008 Express C ++

ฉันได้รับปัญหานี้ด้วยโมดูล Python 2.7 ที่เขียนด้วย C (yEnc ซึ่งมีปัญหาอื่น ๆ กับ MS VS) โปรดทราบว่า Python 2.7 สร้างขึ้นด้วยรุ่น MS VS 2008 ไม่ใช่ 2010!

แม้ว่าจะฟรี แต่ก็ค่อนข้างหาได้ยากเนื่องจาก MS กำลังโปรโมต VS 2010 ถึงกระนั้นการเชื่อมโยงโดยตรงอย่างเป็นทางการของ MSDN ยังคงทำงาน: ตรวจสอบhttps://stackoverflow.com/a/15319069/2227298เพื่อดาวน์โหลดลิงค์


ใช่วิธีที่ดีที่สุดคือติดตั้ง VS2008
pylover

3

หากคุณมีการติดตั้ง mingw

pip install --global-option build_ext --global-option --compiler=mingw32 packagename

ทำงานได้บังคับให้ pip เพื่อสร้างโดยใช้คอมไพเลอร์ mingw แทน Microsoft ดูที่นี่https://github.com/pypa/pip/issues/18สำหรับรายละเอียด (โพสต์ล่าสุด)


3

Microsoft Visual C ++ Compiler สำหรับ Python 2.7 ที่http://www.microsoft.com/en-us/download/details.aspx?id=44266ไม่ใช่วิธีแก้ปัญหาหรือไม่


ทำงานให้ฉัน ข้อความแสดงข้อผิดพลาดในตอนท้ายของการติดตั้ง pip pysftp มีวิธีแก้ปัญหานี้error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
Bob Stein

3

วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้ในปี 2559 คือการติดตั้ง Chocolatey และ vcpython27แพ็คเกจ เปิด PowerShell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y

2

ฉันไม่รู้ว่ามันสายเกินไปหรือไม่ แต่ฉันพบMicrosoft Visual C ++ Compiler สำหรับ Python 2.7ซึ่งอ่านได้

ข้อความแสดงข้อผิดพลาดทั่วไปที่คุณจะได้รับหากคุณต้องการแพ็คเกจคอมไพเลอร์นี้ไม่พบ vcvarsall.bat

หวังว่านี่จะช่วยได้!


2

ฉันได้รับปัญหาเดียวกันและได้แก้ไขมันในขณะนี้

"Google" บอกฉันว่าฉันต้องติดตั้ง "Microsoft Visual C ++ Compiler สำหรับ Python 2.7" ฉันติดตั้งไม่เพียง แต่เครื่องมือ แต่ยังสามารถเผยแพร่ซ้ำได้ด้วย Visual C ++ 2008 แต่ไม่ได้ช่วยอะไร ฉันลองติดตั้ง Visual C ++ 2008 Express Edition แล้ว และปัญหาได้หายไป!

เพียงลองติดตั้ง Visual C ++ 2008 Express Edition!


2

การเรียกimport setuptoolsจะเป็นตัวกลั่นกั้นการกลั่นเพื่อบังคับให้เข้ากันได้กับ Visual Studio การโทรvcvars32.batด้วยตนเองจะตั้งค่าสภาพแวดล้อมเสมือนจริงและป้องกันข้อผิดพลาดทั่วไปอื่น ๆ ที่คอมไพเลอร์จะโยน สำหรับ VS 2017 ไฟล์จะอยู่ที่

"C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvars32.bat Visual"

นี่คือสคริปต์การตั้งค่าที่ฉันใช้เพื่อรวบรวมไฟล์. pyx เป็น. pyd อย่างรวดเร็ว: (หมายเหตุ: ใช้โมดูลบุคคลที่สาม send2trash

# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from traceback import format_exc

# USAGE:
#
#   from cython_setup import run
#   run(pyx_path)

# vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"

# NOTE: to use visual studio 2017 you must have setuptools version 34+
vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"


def _build_ext():
    try:
        pyx_path = sys.argv.pop(-1)
        pyx_path = os.path.abspath(pyx_path)
        if not os.path.exists(pyx_path):
            raise FileNotFoundError(f"{pyx_path} does not exist")
        project_name = sys.argv.pop(-1)
        os.chdir(os.path.abspath(os.path.dirname(pyx_path)))

        print("cwd: %s" % os.getcwd())
        print(os.path.abspath("build"))
        setup(
            name=project_name,
            # cmdclass = {'build_ext': build_ext},
            packages=find_packages(),
            # ext_modules=cythonize(extensions)
            ext_modules=cythonize(pyx_path,
                                  compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},
                                  annotate=True),
            # include_dirs = [numpy.get_include()]
            build_dir=os.path.abspath("build")
        )
    except:
        input(format_exc())


def retry(func):
    def wrapper(*args, **kw):
        tries = 0
        while True:
            try:
                return func(*args, **kw)
            except Exception:
                tries += 1
                if tries > 4:
                    raise
                time.sleep(0.4)

    return wrapper


@retry
def cleanup(pyx_path):
    from send2trash import send2trash
    c_file = os.path.splitext(pyx_path)[0] + ".c"
    if os.path.exists(c_file):
        os.remove(c_file)

    if os.path.exists("build"):
        send2trash("build")


def move_pyd_files(pyx_path):
    pyx_dir = os.path.dirname(pyx_path)
    build_dir = os.path.join(pyx_dir, "build")
    if not os.path.exists(build_dir):
        raise RuntimeError(f"build_dir {build_dir} did not exist....")
    found_pyd = False
    for top, dirs, nondirs in os.walk(build_dir):
        for name in nondirs:
            if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
                found_pyd = True
                old_path = os.path.join(top, name)
                new_path = os.path.join(pyx_dir, name)
                if os.path.exists(new_path):
                    print(f"removing {new_path}")
                    os.remove(new_path)
                print(f"file created at {new_path}")
                os.rename(old_path, new_path)
    if not found_pyd:
        raise RuntimeError("Never found .pyd file to move")

def run(pyx_path):
    """
    :param pyx_path:
    :type pyx_path:
    :return: this function creates the batch file, which in turn calls this module, which calls cythonize, once done
    the batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works
    :rtype:
    """
    try:
        project_name = os.path.splitext(os.path.basename(pyx_path))[0]
        run_script(project_name, os.path.abspath(pyx_path))
    except:
        input(format_exc())


def run_script(project_name, pyx_path):
    dirname = os.path.dirname(pyx_path)
    # ------------------------------
    os.chdir(dirname)
    if os.path.exists(vcvars):
        #  raise RuntimeError(
        # f"Could not find vcvars32.bat at {vcvars}\nis Visual Studio Installed?\nIs setuptools version > 34?")
        subprocess.check_call(f'call "{vcvars}"', shell=True)

    cmd = "python" if platform.system() == "Windows" else "python3"
    subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)
    move_pyd_files(pyx_path)
    cleanup(pyx_path)


if len(sys.argv) > 2:
    _build_ext()

อันที่จริงแล้วการนำเข้าsetuptoolsจะช่วยยังอยู่ในกรณีของCython รวบรวม
Basj

คุณช่วยอธิบายรายละเอียดให้มากขึ้นได้ไหม? จะเรียก vcvars32.bat ด้วยตนเองได้อย่างไร ฉันมีการรวบรวม cython
มิถุนายนวัง

2

ใช้ลิงค์นี้เพื่อดาวน์โหลดและติดตั้งVisual C ++ 2015 เครื่องมือรูปร่าง มันจะดาวน์โหลดvisualcppbuildtools_full.exeและติดตั้งVisual C ++ 14.0โดยอัตโนมัติโดยไม่ต้องติดตั้ง Visual Studio หลังจากการติดตั้งเสร็จสิ้นให้ลองติดตั้ง pip อีกครั้งและคุณจะไม่ได้รับข้อผิดพลาดอีก

ฉันได้ทำการทดสอบบนแพลตฟอร์มและเวอร์ชั่นต่อไปนี้:

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit

1

หากคุณต้องการติดตั้ง pyodbc ในกล่อง Windows ที่ไม่มี Visual Studio ติดตั้งอีกตัวเลือกหนึ่งคือติดตั้ง pyodbc ด้วยตนเองโดยใช้การกระจายแบบไบนารี

นี้จะเป็นประโยชน์โดยเฉพาะอย่างยิ่งถ้าคุณไม่ได้มีสิทธิ์ผู้ดูแลระบบบนเครื่องที่คุณกำลังทำงานกับและกำลังพยายามที่จะตั้งค่าvirtualenv

ขั้นตอน:

  1. ดาวน์โหลดตัวติดตั้ง Windows ล่าสุดจาก ที่นี่ (pyodbc-XXXwin-Y-py2.7.exe)
  2. เปิดโปรแกรมปฏิบัติการติดตั้งโดยใช้ 7-Zip (หรือ WinRAR หรืออะไรก็ตาม)
  3. แยก pyodbc.pyd และ pyodbc-XXX-py2.7.egg-info และวางไว้ [python installation directory or virtualenv]\Lib\site-packages
  4. ไม่มีขั้นตอนที่ 4 :)

1

ด้วย Python 3.4 การพึ่งพาอยู่บน Visual Studio 2010 การติดตั้ง Visual C ++ 2010 Express แก้ไขปัญหาให้ฉันได้

การหลอกลวงให้ใช้การติดตั้ง VS 2008 หรือ 2013 ที่ฉันบังเอิญไม่ทำงาน


1

คุณสามารถใช้ easy_install แทน pip มันใช้งานได้สำหรับฉัน


ข้อผิดพลาดเดียวกันerror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke

1

คำตอบที่ได้รับจาก @monkey เป็นคำตอบที่ถูกต้อง แต่ไม่สมบูรณ์

ในกรณีที่คุณต้องการใช้MinGWคุณควรเลือก C, C ++ และเครื่องมือการพัฒนาอื่น ๆ ที่แนะนำในระหว่างกระบวนการติดตั้ง MinGW เพื่อรับ "make.exe" ด้วย

คุณต้องมีพา ธ ที่ตั้งเป็น make.exe ใน env ด้วย

เพื่อให้คำตอบของเขาสมบูรณ์นี่คือขั้นตอน:

  1. เพิ่ม bin bin ของ mingw32 ให้กับตัวแปรสภาพแวดล้อมของคุณ
  2. ผนวกC:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;ไปที่ PATH
  3. แก้ไข (สร้างหากไม่มี) distutils.cfgไฟล์ที่อยู่ที่C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

ตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมถูกตั้งค่าโดยการเปิด cmd.exe ใหม่


โมดูลไพ ธ อนขนาด 32 บิตควรถูกคอมไพล์ด้วย mingw 32 บิตในขณะที่โมดูลหลาม 64 บิตควรถูกคอมไพล์ด้วย 64 บิต mingw บน Cygwin 64 บิตมี 2 executables MinGW ที่ใช้ได้: และx86_64-w64-mingw32-gcc i686-w64-mingw32-gccเห็นได้ชัดว่าโปรแกรมปฏิบัติการเหล่านี้เหมือนกับที่คุณได้รับจาก Mingw ตามปกติ (เรียบเรียงในสภาพแวดล้อม Cygwin)
CMCDragonkai
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.