galat: Tidak dapat menemukan vcvarsall.bat

851

Saya mencoba untuk menginstal dulwich paket Python :

pip install dulwich

Tapi saya mendapatkan pesan kesalahan samar:

error: Unable to find vcvarsall.bat

Hal yang sama terjadi jika saya mencoba menginstal paket secara manual:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
okada
sumber
6
Untuk referensi di masa mendatang, akan menyenangkan untuk melihat pada platform apa Anda menggunakan ini.
viam0Zah
47
Jika menurut Anda ini adalah pesan kesalahan yang samar dan tidak membantu, pilih bug di bugs.python.org/issue2943
Kolonel Panic
48
Microsoft sekarang menyediakan solusi: microsoft.com/en-us/download/details.aspx?id=44266
Martijn Pieters
6
@ MartijnPieters Saya mencoba mengunduh dan menginstal tautan yang Anda berikan dengan roda dan setuptools 7.0 tetapi tidak berhasil, saya menerima pesan: 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 (seorang lelaki di tim Python Microsoft) telah menulis posting blog tentang topik ini yang layak dibaca: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…
Cody Piersall

Jawaban:

683

Pembaruan : Komentar menunjukkan bahwa petunjuk di sini mungkin berbahaya. Pertimbangkan untuk menggunakan edisi Visual C ++ 2008 Express atau Kompiler Microsoft Visual C ++ yang dibuat khusus untuk Python ( detail ) dan BUKAN menggunakan jawaban asli di bawah ini. Pesan kesalahan asli berarti versi Visual C ++ yang diperlukan tidak diinstal.


Untuk instalasi Windows:

Saat menjalankan setup.py untuk instalasi paket, Python 2.7 mencari Visual Studio 2008. Anda dapat menipu Python untuk menggunakan Visual Studio yang lebih baru dengan mengatur jalur yang benar dalam VS90COMNTOOLSvariabel lingkungan sebelum memanggil setup.py.

Jalankan perintah berikut berdasarkan versi Visual Studio yang diinstal:

  • 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%

PERINGATAN: Seperti disebutkan di bawah, jawaban ini kemungkinan tidak akan berfungsi jika Anda mencoba mengompilasi modul python.

Lihat Membangun lxml untuk Python 2.7 di Windows untuk detailnya.

fmuecke
sumber
21
Itu untuk saya :(
fmuecke
8
@Gili: Sepertinya masalah ini disebabkan oleh spasi pada variabel, cobalah membungkusnya dengan tanda kutip. Bagi saya% VS100COMNTOOLS% = "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k
7
Ini tidak akan berfungsi untuk banyak hal, karena Python bergantung pada VS2008. Lihatlah jawaban ini: stackoverflow.com/questions/6551724/…
shezi
182
PERINGATAN!!! Ini jawaban yang SALAH . Anda tidak boleh dalam keadaan apa pun mengkompilasi ekstensi Python C menggunakan kompiler (versi) yang berbeda yang digunakan untuk mengkompilasi Python sendiri karena dua (versi) kompiler tersebut mungkin memiliki pustaka runtime C yang tidak kompatibel. Lihat jawaban ini untuk lebih jelasnya.
Piotr Dobrogost
72
Anda dapat mengunduh Visual C ++ 2008 Express Edition gratis dari go.microsoft.com/?linkid=7729279 , yang akan mengatur variabel lingkungan VS90COMNTOOLS selama instalasi dan karenanya membangun dengan kompiler yang kompatibel.
Eric Smith
225

Saya menemukan solusinya. Saya memiliki masalah yang sama persis, dan kesalahan, menginstal 'amara'. Saya telah menginstal mingw32, tetapi distutils perlu dikonfigurasi.

  1. Saya memiliki Python 2.6 yang sudah diinstal.
  2. Saya menginstal mingw32 ke C:\programs\mingw\
  3. Tambahkan direktori bin mingw32 ke variabel lingkungan Anda: tambahkan c:\programs\MinGW\bin;ke PATH
  4. Edit (buat jika tidak ada) file distutils.cfg yang berada di C:\Python26\Lib\distutils\distutils.cfgmenjadi:

    [build]
    compiler=mingw32
  5. Sekarang jalankan easy_install.exe amara.

Pastikan lingkungan diatur dengan membuka yang baru cmd.exe.

ninMonkey
sumber
45
Ini berfungsi baik untuk Python2.6, tetapi untuk beberapa alasan saya tidak bisa membuatnya berfungsi pada Python2.7. Ini berfungsi jika saya mengunduh sumber paket saya dan menginstal menggunakan 'python setup.py install --compile = mingw32', tetapi untuk beberapa alasan menggunakan easy_install atau pip masih mencoba menemukan vcvarsall.
Jonathan Hartley
2
Saya akhirnya mendapatkan scikits.image untuk diinstal dengan Python (x, y) 2.7 dengan menambahkan C:\msysgit\mingw\mingw32\bindan C:\msysgit\mingw\binke PATH pengguna dan memulai kembali Spyder sebelum berjalan pip installlagi
endolith
20
Tidak perlu pernah reboot karena perubahan variabel lingkungan. Membuka proses cmd.exe baru sudah cukup.
Tomalak
11
Saya masih tidak bisa memperbaikinya. Ini adalah kesalahan: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1easy_install.exe amara
pengguna
5
@ pengguna, Anda harus membuka file ini: C:\Python27\Lib\distutils\cygwincompiler.pydan menghapus semua kejadian –mno-cygwindari itu; ini karena versi terbaru dari GCC telah menghapus –mno-cygwinopsi dan seharusnya tidak ada di sana.
Zeinab Abbasimazar
220

Anda dapat menginstal versi kompilasi dari http://www.lfd.uci.edu/~gohlke/pythonlibs/

VolodymyrB
sumber
15
hanya sebuah tip: Anda dapat menginstal paket dari situs ini di virtualenv dengan menjalankan easy_install binary_installer_built_with_distutils.exedi virtualenv, sesuai dengan jawaban ini .
yangzh
14
Setiap pengembang Python Windows harus tahu tentang ini
Siswa sekolah menengah
1
Anda juga dapat wheel convert ....exemenginstal ini dan kemudian menginstalnya dengan pip kapan saja Anda suka.
Zooba
3
Untuk lebih tepatnya, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python dan setelah diunduh, buka terminal sebagai admin dan jalankanpython -m pip install <filename>
arun
Holly ibu Tuhan, ini tepat di tempat. Bekerja seperti pesona, TY :)
Amir
162

Jika Anda ingin mengkompilasi dengan Visual Studio C ++ bukan mingw ...

  1. Jalankan python.exeuntuk menampilkan versi VC ++ mana yang dikompilasi (contoh ditunjukkan di bawah).

    Hal ini penting untuk menggunakan versi yang sesuai dari Visual C ++ compiler yang Python dikompilasi dengan sejak distilutils 's get_build_versionmencegah pencampuran versi ( per peringatan Piotr ini ).

    • Kuning (atas) adalah Python 2.7, dikompilasi dengan MSC v.1500 (Visual Studio C ++ 2008)
    • Merah (bawah) adalah Python 3.4.1, dikompilasi dengan MSC v.1600 (Visual Studio C ++ 2010)

    Contoh dari baris perintah yang menunjukkan Python 2.7 dikompilasi dengan MSC v.1500 dan Python 3.4.1 dikompilasi dengan MSC v.1600

  2. Gunakan tabel di bawah ini [1] untuk mencocokkan versi VC ++ internal dengan rilis Visual Studio yang sesuai:

    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. Unduh dan instal versi yang sesuai dari Visual Studio C ++ dari langkah sebelumnya.
    Catatan tambahan untuk versi spesifik VC ++ tercantum di bawah ini.

    Catatan untuk Visual Studio C ++ 2008

    Untuk hanya kompiler 32-bit, unduh Visual Studio C ++ 2008 Express Edition .

    Untuk kompiler 64-bit [2] [3] , unduh Windows SDK untuk Windows 7 dan .NET Framework 3.5 SP1 .

    • Hapus centang semua kecuali Developer Tools >> Visual C++ Compilersuntuk menghemat waktu dan ruang disk dari menginstal alat SDK yang Anda tidak perlu

    Catatan untuk Visual Studio C ++ 2010

    Menurut Microsoft, jika Anda menginstal Visual Studio 2010 SP1, itu mungkin telah menghapus kompiler dan pustaka untuk VC ++.
    Jika demikian, unduh Pembaruan Kompiler Visual C ++ 2010 SP1 .

    Catatan untuk Visual Studio C ++ 2015

    Jika Anda tidak memerlukan Visual Studio IDE, unduh Visual Studio C ++ 2015 Build Tools .

    Catatan untuk Visual Studio C ++ 2017

    Jika Anda tidak memerlukan IDE Visual Studio, unduh Build Tools untuk Visual Studio 2017 .

    Saran : Jika Anda memiliki instalasi Python 32-dan 64-bit, Anda mungkin juga ingin menggunakan virtualenv untuk membuat lingkungan Python yang terpisah sehingga Anda dapat menggunakan satu atau yang lain sekaligus tanpa mengacaukan jalan Anda untuk memilih versi Python mana yang akan dipilih menggunakan.

Menurut @srodriguex , Anda mungkin dapat melewati pemuatan file batch secara manual (Langkah 4-6) dengan cara menyalin beberapa file batch ke tempat Python mencari dengan mengikuti jawaban ini . Jika itu tidak berhasil, berikut adalah langkah-langkah berikut yang awalnya bekerja untuk saya.

  1. Buka a cmd.exe

  2. Sebelum Anda mencoba menginstal sesuatu yang memerlukan ekstensi C, jalankan file batch berikut untuk memuat lingkungan kompilator VC ++ ke dalam sesi (yaitu variabel lingkungan, path ke kompiler, dll).

    Menjalankan:

    • Kompiler 32-bit:

      Catatan : Instalasi Windows 32-bit hanya akan C:\Program Files\seperti yang diharapkan

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

    • Kompiler 64-bit:

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

      Catatan : Ya, kompiler 64-bit asli ada di Program Files (x86). Jangan tanya kenapa.
      Selain itu, jika Anda bertanya-tanya apa bedanyavcvars64.bat dan vcvarsx86_amd64.batatau yang lebih penting perbedaan antara amd64dan x86_amd64, yang pertama adalah untuk alat kompiler 64-bit asli dan yang terakhir adalah kompiler silang 64-bit yang dapat berjalan pada instalasi Windows 32-bit .

    Memperbarui:
    Jika karena alasan tertentu Anda mendapatkan di error: ... was unexpected at this time.mana ...serangkaian karakter, maka Anda perlu memeriksa bahwa Anda path variabel tidak memiliki karakter asing seperti kutipan tambahan atau karakter liar. File batch tidak akan dapat memperbarui jalur sesi Anda jika itu tidak masuk akal sejak awal.

  3. Jika itu berjalan dengan baik, Anda harus mendapatkan salah satu pesan berikut tergantung pada versi VC ++ dan perintah mana yang Anda jalankan:

    Untuk alat kompiler 32-bit:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Untuk alat kompiler 64-bit:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Sekarang , jalankan pengaturan viapython setup.py install ataupip install pkg-name

  5. Harapan dan silangkan jari-jari Anda agar planet-planet disejajarkan dengan benar agar VC ++ dapat bekerja sama.

Josh Bowden
sumber
Tidak bisa merekomendasikan cukup bahwa Anda tidak pergi melalui rasa sakit bergerak langsung ke 64 bit. Hanya masalah waktu sebelum Anda membutuhkan lebih dari 4gb ruang alamat. Saya berbicara dari pengalaman yang menyakitkan setelah menjadi 32 bit karena itu jauh lebih mudah, kemudian harus menghapus semuanya termasuk dependensi dan berjalan 64 bit. Hampir sepanjang akhir pekan.
Thomas Browne
1
Kemudian lagi, saya lupa berapa banyak orang yang harus menggunakan Python untuk tugas yang jauh lebih besar seperti itu. Dan @ThomasBrowne, saya yakin itu adalah pengalaman yang menyakitkan dan tidak perlu. Saya mencari ke dalamnya, dan mudah-mudahan saya dapat menemukan sesuatu. Masalah utama adalah bahwa Visual Studio C ++ 2008 Express tidak datang dengan kompiler 64-bit, tapi saya yakin itu ada di sekitar sini.
Josh Bowden
Hanya memperbaruinya dengan informasi lebih lanjut yang mencakup bagaimana juga mendapatkan kompiler 64-bit jika Anda membutuhkannya.
Josh Bowden
Dalam kasus saya, saya mengikuti langkah 1 di atas dan melewatkan sisanya mengikuti jawaban ini . Sekarang saya dapat menginstal paket menghindari gangguan menjalankan .bat.
srodriguex
@srodriguex baik dalam hal itu, sepertinya Python mengasumsikan bahwa alat kompiler 64-bit dimuat ke dalam PATH menggunakan yang dicari ...\VC\bin\vcvarsamd64.batdan ...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden
73

Apa yang sedang terjadi? Modul python dapat menjadi bagian yang ditulis dalam C atau C ++ (biasanya untuk kecepatan). Jika Anda mencoba menginstal paket seperti itu dengan Pip (atausetup.py ), ia harus mengkompilasi C / C ++ itu dari sumber. Di luar kotak, Pip akan dengan berani menganggap Anda kompiler Microsoft Visual C ++ diinstal. Jika Anda tidak memilikinya, Anda akan melihat pesan kesalahan samar "Kesalahan: Tidak dapat menemukan vcvarsall.bat".

Solusi yang ditentukan adalah menginstal kompiler C / C ++, baik Microsoft Visual C ++, atau MinGW (proyek open-source). Namun, menginstal dan mengkonfigurasi salah satu dari keduanya adalah hal yang sulit. (Edit 2014: Microsoft telah menerbitkan kompiler C ++ khusus untuk Python 2.7)

Solusi termudah adalah dengan menggunakan installer Windows (.msi) Christoph Gohlke untuk paket Python populer. Dia membangun installer untuk Python 2.x dan 3.x, 32 bit dan 64 bit. Anda dapat mengunduhnya dari http://www.lfd.uci.edu/~gohlke/pythonlibs/


Jika Anda juga berpikir "Kesalahan: Tidak dapat menemukan vcvarsall.bat" adalah pesan yang sangat membingungkan dan tidak membantu, maka silakan komentari bug di http://bugs.python.org/issue2943 untuk menggantinya dengan yang lebih bermanfaat dan user- pesan ramah

Sebagai perbandingan, Ruby mengirim dengan Gem paket manajer dan menawarkan kompiler C / C ++ yang semu resmi, DevKit. Jika Anda mencoba menginstal paket tanpanya, Anda akan melihat pesan bermanfaat yang bermanfaat ini:

Harap perbarui PATH Anda untuk menyertakan alat bangun atau unduh DevKit dari http://rubyinstaller.org/downloads dan ikuti instruksi di http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Anda dapat membaca kata-kata kasar yang lebih panjang tentang kemasan Python di https://stackoverflow.com/a/13445719/284795

Kolonel Panic
sumber
Bagaimana saya bisa menggunakan pip untuk menginstal executable yang sudah dikompilasi sebelumnya di lingkungan virtual saya?
Shailen
@shailenTJ pertanyaan bagus. Saya belum pernah melakukannya, tetapi coba stackoverflow.com/a/5442340/284795
Kolonel Panic
Ini adalah solusi terbaik / termudah yang saya ketahui. Terima kasih.
user1477388
Itu Sunting 2014 adalah jawaban terbaik bagi saya. Instruksi yang mudah terlewatkan: pastikan Anda memperbarui setuptoolske versi 6.0atau lebih tinggi dengan pip install setuptools --upgrade.
orlade
64

Anda harus menginstal kompiler Microsoft, yang kompatibel dengan kompiler yang digunakan untuk membangun Python. Ini berarti Anda memerlukan Visual C ++ 2008 (atau lebih baru, dengan beberapa penyesuaian ).

Microsoft sekarang memasok kompiler dan header yang dibundel hanya untuk dapat mengkompilasi ekstensi Python, di URL yang mudah diingat:

Kompiler Microsoft Visual C ++ untuk Python 2.7

http://aka.ms/vcpython27

Ini adalah paket yang relatif kecil; 85MB untuk diunduh, dapat diinstal tanpa hak admin, tidak perlu reboot. Namanya sedikit menyesatkan, kompiler akan bekerja untuk semua versi Python yang awalnya dikompilasi dengan Visual C ++ 2008, bukan hanya Python 2.7.

Jika Anda memulai prompt atau cetak interaktif Python sys.version, cari MSCstring versi; jika sudah, MSC v.1500Anda bisa menggunakan alat ini.

Dari pengumuman asli ke daftar distutils :

Microsoft telah merilis paket kompiler untuk Python 2.7 untuk mempermudah orang membangun dan mendistribusikan modul ekstensi C mereka di Windows. Microsoft Visual C ++ Compiler untuk Python 2.7 (alias VC9) tersedia di: http://aka.ms/vcpython27

Paket ini berisi semua alat dan header yang diperlukan untuk membangun modul ekstensi C untuk Python 2.7 32-bit dan 64-bit (perhatikan bahwa beberapa modul ekstensi memerlukan dependensi pihak ketiga seperti OpenSSL atau libxml2 yang tidak termasuk). Versi lain dari Python yang dibangun dengan Visual C ++ 2008 juga didukung, jadi "Python 2.7" hanyalah iklan - ini akan bekerja dengan baik dengan 2.6 dan 3.2.

Perhatikan bahwa Anda perlu memiliki setuptools 6.0 atau yang lebih baru (tercantum dalam persyaratan sistem pada halaman unduhan). Proyek yang Anda pasang harus digunakan setuptools.setup(), tidak distutilsatau deteksi otomatis tidak akan berfungsi.

Microsoft telah menyatakan bahwa mereka ingin menjaga URL tetap stabil, sehingga skrip otomatis dapat merujuknya dengan mudah.

Martijn Pieters
sumber
2
Sesuai komentar saya yang lain, Anda dapat memastikan setuptoolssudah mutakhir pip install setuptools --upgrade.
orlade
Saya melihat ke masalah mengapa logika yang relevan ada di dalam - setuptoolsdaripada distutilssemua, membangun modul adalah fungsi inti, dan memang memiliki kode yang relevan, tetapi versi yang lebih lama. Sepertinya distutilspengelola hanya menyerah mendukung semua variasi MSSDK yang mungkin dan membuang pekerjaan ini ke setuptoolskolega mereka yang lebih bersemangat.
ivan_pozdeev
1
@ivan_pozdeev: setuptoolsjuga bisa merilis jauh lebih sering daripada distutils, termasuk dalam siklus rilis Python. Dan distitutilsmemang telah masuk ke mode pemeliharaan, dengan bekerja pada sistem baru yang dijadwalkan untuk menggantikannya. Pekerjaan itu malah terhenti.
Martijn Pieters
cython menggunakan distutils, Anda perlu mengimpor setuptools yang distutils monyet-patch: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa
54

Saya hanya punya masalah yang sama, jadi saya akan menceritakan kisah saya di sini berharap ini membantu orang lain dengan masalah yang sama dan menyelamatkan mereka beberapa jam yang baru saja saya habiskan:

Saya memiliki mingw (g ++ (GCC) 4.6.1) dan python 2.7.3 di kotak windows 7 dan saya mencoba menginstal PyCrypto.

Semuanya dimulai dengan kesalahan ini ketika menjalankan setup.py install:

error: Unable to find vcvarsall.bat

Mudah dipecahkan setelah googling kesalahan dengan menetapkan mingw sebagai kompiler pilihan:

setup.py install build --compiler=mingw32

Masalahnya adalah kemudian saya mendapat kesalahan yang berbeda:

configure: error: cannot run C compiled programs.

Ternyata anti-virus saya memblokir eksekusi .exe yang baru dikompilasi. Saya baru saja menonaktifkan "resident shield" anti-virus dan pergi ke kesalahan berikutnya:

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

Ini menyelesaikannya: "Baik instal versi MinGW yang sedikit lebih lama, atau edit distutils \ cygwinccompiler.py di direktori Python Anda untuk menghapus semua instance -mno-cygwin." (dari sini )

Sekarang, saya akhirnya bisa mulai bekerja.

fpessoa
sumber
7
Anda juga membutuhkan versi pustaka Python yang kompatibel dengan MinGW. Lihat eli.thegreenplace.net/2008/06/28/... untuk informasi lebih lanjut
Gili
Putar dan belok: D
Xilpex
23

Sepertinya mencari VC compiler, jadi Anda bisa mencoba menyebutkan tipe kompiler -c mingw32, karena Anda memiliki msys

python setup.py install -c mingw32
KAMU
sumber
16
Hanya untuk clairify, perintah yang berfungsi adalah: python setup.py build --compiler=mingw32diikuti olehpython setup.py install
Emil Stenström
Setelah menjalankan python setup.py build --compiler = mingw32 saya menerima ImportError: Tidak ada modul bernama Cython.Distutils saat Cython diinstal di bawah Anaconda. Ada saran?
Serendipity
20

Saya memiliki python 2.73 dan windows 7. Solusi yang bekerja untuk saya adalah:

  1. Menambahkan direktori bin mingw32 ke variabel lingkungan: tambahkan PATH denganC:\programs\mingw\bin;
  2. Distutils.cfg dibuat terletak di C:\Python27\Lib\distutils\distutils.cfgmengandung:

    [build]
    compiler=mingw32

Untuk menangani MinGW tidak mengenali flag -mno-cygwin lagi, hapus flag di C: \ Python27 \ Lib \ distutils \ cygwincompiler.py baris 322 hingga 326, sehingga terlihat seperti ini:

  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))
LDN
sumber
15

Lihat di setup.pyfile paket yang Anda coba instal. Jika ini adalah paket yang lebih lama, itu mungkin mengimpor distutils.core.setup()daripadasetuptools.setup() .

Saya berlari ke ini (pada 2015) dengan kombinasi faktor-faktor ini:

  1. Microsoft Visual C ++ Compiler untuk Python 2.7 dari http://aka.ms/vcpython27

  2. Paket yang lebih lama yang menggunakan distutils.core.setup()

  3. Mencoba melakukannya python setup.py builddaripada menggunakan pip.

Jika Anda menggunakan versi terbaru dari pip, itu akan memaksa (monkeypatch) paket untuk menggunakan setuptools, bahkan jika setup.pypanggilan untuk distutils. Namun, jika Anda tidak menggunakan pip, dan alih-alih hanya melakukan python setup.py build, proses build akan menggunakan distutils.core.setup(), yang tidak tahu tentang lokasi pemasangan kompiler.


Larutan

Langkah 1: Buka Visual C ++ 2008 Command Prompt yang sesuai

Buka menu Mulai atau layar Mulai, dan cari "Visual C ++ 2008 32-bit Command Prompt" (jika python Anda 32-bit) atau "Visual C ++ 2008 64-bit Command Prompt" (jika python Anda 64-bit) . Menjalankannya. Prompt perintah harus mengatakan Visual C ++ 2008 ... di bilah judul.

Langkah 2: Tetapkan variabel lingkungan

Setel variabel lingkungan ini di prompt perintah yang baru saja Anda buka.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

Referensi http://bugs.python.org/issue23246

Langkah 3: Bangun dan pasang

cdke paket yang ingin Anda bangun, dan jalankan python setup.py build, lalu python setup.py install. Jika Anda ingin menginstal ke virtualenv, aktifkan sebelum Anda membangun.

Christian Long
sumber
Anda juga dapat membangun paket menggunakan <code> pip </code> alih-alih <code> python setup.py build </code>
aronadaal
9

Mungkin seseorang bisa tertarik, berikut ini bekerja untuk saya untuk paket py2exe. (Saya memiliki windows 7 64 bit dan python portabel 2.7, Visual Studio 2005 Express dengan Windows SDK untuk Windows 7 dan .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

kemudian:

python.exe setup.py install
Stefano Fenu
sumber
Tidak, Anda benar, saya tidak yakin apa yang terjadi, saya akan menghapus komentar aslinya.
Dave Challis
1
Sangat berguna!! Dalam kasus saya, saya membuat 'set VS90COMNTOOLS =% VS110COMNTOOLS%'.
jrvidotti
@Exzile: ya, Anda mengetikkan perintah-perintah ini pada sesi prompt perintah yang sama
Stefano Fenu
JANGAN LAKUKAN INI!!! Lihat jawaban ini untuk lebih jelasnya.
Anonim
8

Saya menghabiskan hampir 2 hari mencari tahu bagaimana memperbaiki masalah ini di python saya versi 3.4 64 bit: Python 3.4.3 (v3.4.3: 9b73f1c3e601, 24 Feb 2015, 22:44:40) [MSC v.1600 64 bit (AMD64 )] pada win32

Solusi 1, sulit: (sebelum membaca ini, baca dulu Solusi 2 di bawah) Akhirnya, inilah yang membantu saya:

  1. instal Visual C ++ 2010 Express
  2. instal Microsoft Windows SDK v7.1 untuk Windows 7
  3. membuat file secara manual vcvars64.batdi C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64yang berisiCALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 atau jalur lain tergantung di mana Anda telah menginstal Anda
  4. (ini tampaknya opsional) instal Pembaruan Kompiler Microsoft Visual Studio 2010 Paket Layanan 1 bersama dengan Microsoft Visual C ++ 2010 Paket Layanan 1 untuk Windows SDK 7.1
  5. setelah itu saya mencoba pip install numpytetapi menerima kesalahan berikut:

    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

    Aku berubah mfinfoke Nonedalam C:\Python34\Lib\distutils\msvc9compiler.pyper ini https://stackoverflow.com/a/23099820/4383472

  6. akhirnya setelah pip install numpyperintah antivirus avast saya mencoba untuk mengganggu proses instalasi, tetapi saya dengan cepat menonaktifkannya

Butuh waktu sangat lama - beberapa menit untuk kompilasi numpy, saya bahkan berpikir bahwa ada kesalahan, tetapi akhirnya semuanya baik-baik saja.

Solusi 2, mudah: (Saya tahu pendekatan ini telah disebutkan dalam jawaban yang sangat banyak dipilih , tetapi izinkan saya mengulangi karena itu benar-benar lebih mudah) Setelah melalui semua pekerjaan ini saya mengerti bahwa cara terbaik bagi saya adalah hanya menggunakan sudah binari yang dikompilasi dari http://www.lfd.uci.edu/~gohlke/pythonlibs/ di masa depan. Ada kemungkinan sangat kecil bahwa saya akan memerlukan beberapa paket (atau versi paket) yang tidak dikandung oleh situs ini. Proses instalasi juga jauh lebih cepat dengan cara ini. Misalnya, untuk menginstal numpy:

  1. donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(jika Anda memiliki Python 3.4 64-bit) dari situs itu
  2. di command prompt atau PowerShell menginstalnya dengan pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(atau path lengkap ke file tergantung bagaimana command prompt dibuka)
Buruk
sumber
numpy 1.9.9 + mkl ‑ cp34 none win win_amd64.whl - tidak dapat menemukan file ini di tautan di atas.
Amresh Giri
7

Saya ingin menjalankan pysph pada Windows 10 di bawah Python 2.7 dan mendapat vcvarsall.bat tidak ditemukan (dari distutils)

Solusi saya adalah sebagai berikut:

Instal Microsoft Visual C ++ untuk Python 2.7 (seperti yang disarankan @Michael)

Pada Windows 10 diinstal ke (nama pengguna saya adalah Andreas):

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

Setel variabel lingkungan VS90COMNTOOLS ke jalur instalasi Visual C ++ untuk Python 2.7 (lihat jalur di atas).

Jika masih tidak berhasil, maka modifikasi dalam modul

C:/Python27/lib/distutils

file msvc9compiler.py . Temukan di dalamnya fungsi find_vcvarsall dan lakukan modifikasi berikut.

Ganti baris:

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

dengan

productdir = os.path.join(toolsdir)

Di sinilah vcvarsall.bat berada dalam kasus saya (periksa, di mana vcvarsall.bat berada di instalasi Anda).

chiefenne
sumber
Yang cukup menarik %userprofile%\Appdata\Local\Programs\CommonAdalah kosong bagi saya.
Bryce Guinta
Bahkan setelah menginstal Microsoft Visual C ++ untuk Python 2.7?
Chiefenne
7

Saya mengalami masalah ini ketika saya mencoba menginstal perpustakaan numpy di python 3.5 saya. Solusinya adalah menginstal VS2015. Saya punya VS2008, 2012, 2013, tidak ada yang kompatibel dengan python 3.5. Ternyata versi python yang lebih baru memiliki ketergantungan pada versi yang lebih baru dari VS.

Pastikan juga C ++ Common Tools diinstal dengan Visual Studio.

masukkan deskripsi gambar di sini

Ditjen
sumber
6

Saya mencoba semua jawaban di atas, dan menemukan semuanya tidak berfungsi, ini mungkin saya menggunakan Windows 8 dan telah menginstal Visual Studio 2012. Dalam hal ini, inilah yang Anda lakukan.

The vcvarsall.batfile terletak di sini: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Cukup pilih file, dan salin.

Lalu buka direktori ini: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

dan tempel file. Dan kemudian, semua harus baik-baik saja.

Game Brainiac
sumber
Tidak semua tidak baik saya mengikuti jawaban Anda tetapi saya masih mendapatkan kesalahan yang sama.
Stupid_Internus
6

Anda dapat mengunduh Visual C ++ 2008 Express Edition gratis dari http://go.microsoft.com/?linkid=7729279 , yang akan mengatur variabel lingkungan VS90COMNTOOLS selama instalasi dan karenanya membangun dengan kompiler yang kompatibel.

Seperti @PiotrDobrogost disebutkan dalam komentar, jawabannya untuk pertanyaan lain ini menjelaskan secara terperinci tentang mengapa Visual C ++ 2008 adalah hal yang tepat untuk dibangun, tetapi ini dapat berubah karena Windows build dari Python bergerak ke versi Visual Studio yang lebih baru: Building lxml untuk Python 2.7 di Windows

Eric Smith
sumber
Pastikan juga tidak ada versi lain yang diinstal. Saya mengalami kesulitan dengan ini. Saya memformat ulang komputer, dan menginstal versi ini saja. Sejak menghapus beberapa versi VS akan memakan waktu lama.
jmunsch
6

Saya memiliki masalah ini menggunakan Python 3.4.1 pada Windows 7 x64 , dan sayangnya paket yang saya butuhkan tidak memiliki exe atau roda yang cocok yang bisa saya gunakan. Sistem ini membutuhkan beberapa 'solusi', yang dirinci di bawah ini (dan TLDR di bagian bawah ).

Menggunakan info dalam jawaban Jaxrtech di atas , saya memutuskan bahwa saya memerlukan Visual Studio C ++ 2010 (sys.version return MSC v.1600), jadi saya menginstal Visual C ++ 2010 Express dari tautan dalam jawabannya, yaitu http://go.microsoft .com /? linkid = 9709949 . Saya menginstal semuanya dengan pembaruan, tetapi seperti yang Anda baca di bawah, ini adalah kesalahan. Hanya versi asli Express yang harus diinstal saat ini (tidak ada yang diperbarui).

vcvarsall.bat sekarang ada, tetapi ada kesalahan baru saat menginstal paket query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path'],. Ada pertanyaan stackoverflow lain dengan kesalahan ini, seperti Kesalahan saat membangun / menginstal modul C untuk Python 2.7

Saya memutuskan dari jawaban itu bahwa 2010 Express hanya menginstal kompiler 32-bit. Untuk mendapatkan kompiler 64-bit (dan lainnya), Anda harus menginstal Windows 7.1 SDK. Lihat http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Ini tidak akan menginstal untuk saya, dan installer mengembalikan kesalahan installation failed with return code 5100. Saya menemukan solusinya di tautan berikut: http://support.microsoft.com/kb/2717426 . Singkatnya, jika versi yang lebih baru dari x86 dan x64 Microsoft Visual C ++ 2010 Redistributable diinstal, mereka bertentangan dengan yang ada di pemasang SDK, dan perlu dihapus terlebih dahulu.

SDK kemudian diinstal, tetapi saya perhatikan vcvars64.bat masih belum ada C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin, juga subfoldernya. vcvarsall.bat menjalankan file batch vcvars64, jadi tanpa itu, paket python masih tidak mau menginstal (saya lupa kesalahan yang ditunjukkan saat ini).

Saya kemudian menemukan beberapa instruksi di sini: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1 Mengikuti petunjuk, saya sudah menginstal Express dan 7.1 SDK, jadi menginstal SDK 7.1 SP1, dan melakukan SDK 7.1 SP1, dan melakukan memperbaiki file header yang hilang. Saya kemudian secara manual membuat vcvars64.bat dengan kontennya CALL setenv /x64. Saya akan menempelkan semua instruksi itu di sini, agar tidak hilang.

Langkah 1 adalah mengunduh Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express adalah tempat yang baik untuk memulai. Unduh penginstal, dan jalankan (vc_web.exe). Anda tidak perlu unduhan tambahan SQL 2008.

Anda juga akan memerlukan Windows SDK (saat ini 7.1) untuk kompiler 64-bit - kecuali jika Anda ingin membuat build 32-bit saja, yang tidak sepenuhnya didukung ...

http://www.microsoft.com/en-us/download/details.aspx?id=8279 adalah titik awal yang baik untuk mengunduh ini - Anda ingin menjalankan winsdk_web.exe saat diunduh!

Instalasi default di sini baik-baik saja.

Terakhir, unduh dan instal pembaruan Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=4422

Dan, untuk memperbaiki file header yang hilang, VS2010 SP1. http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

Dan, sialan, perbaiki file batch yang hilang untuk VS2010 Express. Ini benar-benar absurd.

Di C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64, buat "vcvars64.bat" dengan yang berikut ini (Anda harus menjalankan sebagai administrator):

CALL setenv / x64

Paket python saya masih belum menginstal (tidak dapat mengingat kesalahan). Saya kemudian menemukan beberapa instruksi (disalin di bawah) untuk menggunakan Command Prompt SDK 7.1 khusus, lihat: https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html

Lupakan pertanyaan ini. Seseorang di sini memperhatikan item ini pada menu: Mulai-> Semua Program-> Microsoft Windows SDK v7.1 -> Windows SDK 7.1 Prompt Perintah

Ini menjalankan pekerjaan batch yang tampaknya mengatur lingkungan kerja untuk kompiler. Dari prompt itu, Anda bisa mengetik "setup.py build" atau "setup.py install".

Saya membuka Windows SDK 7.1 Command Prompt seperti yang diperintahkan, dan menggunakannya untuk menjalankan easy_install pada paket python. Dan akhirnya, sukses!


TLDR ;

  1. Instal Visual Studio Express 2010 (lebih disukai tanpa redistributables diperbarui atau server SQL).
  2. Instal Windows 7.1 SDK
  3. Instal pembaruan SDK 7.1 SP1, dan perbaikan file header VS2010 SP1 (langkah ini mungkin tidak diperlukan).
  4. Buat C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batdengan konten secara manualCALL setenv /x64
  5. Mulai-> Semua Program-> Microsoft Windows SDK v7.1 -> Perintah Windows SDK 7.1 Prompt untuk membuka prompt perintah x64 khusus, yang kemudian dapat digunakan dengan python / easy_install / pip / etc (termasuk yang ada di virtual_envs).
neRok
sumber
4

Di bawah langkah-langkah memperbaiki masalah ini untuk saya, saya mencoba membuat pengaturan dengan ekstensi cython.

  1. Instal Microsoft Visual C ++ Compiler untuk Python 2.7
  2. Lokasi pemasangan default adalah @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python Ini mungkin benar-benar memperbaiki masalah, uji sekali sebelum melanjutkan.
  3. Jika gagal, Periksa di mana di VC ++ untuk file python vcvarsall.bat berada
  4. Buka file msvc9compiler.py dari paket distutils di notepad.
  5. Dalam kotak saya ini adalah @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall berfungsi dalam file ini, menentukan versi VC dengan mencetak argumen versi. Untuk Python 2.7 itu kemungkinan 9.0
  6. Sekarang buat variabel lingkungan VS90COMNTOOLS, Menunjuk ke C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ untuk Python \ 9.0 \ VC \ bin
  7. Untuk beberapa alasan distutils mengharapkan file vcvarsall.bat berada dalam dir VC, tetapi VC ++ untuk alat python memilikinya di root 9.0 Untuk memperbaikinya, hapus "VC" dari path.join (kira-kira di sekitar baris 247)

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

Langkah-langkah di atas memperbaiki masalah untuk saya.

Riyas Deen
sumber
Saya mendapatkan kesalahan penautan saat mengikuti langkah-langkah di atas LINK: kesalahan LNK2001: simbol eksternal yang belum terselesaikan init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib: fatal fatal LNK1120: 1 kesalahan eksternal yang belum terselesaikan: perintah 'C: \\ Pengguna \\ ma306477 \\ AppData \\ Program Lokal \\ \\ Umum \\ Microsoft \\ Visual C ++ untuk Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe 'gagal dengan status keluar 1120
manish Prasad
3

Saya mencoba banyak solusi tetapi hanya satu yang berfungsi untuk saya, instalasi Microsoft Visual Studio 2008 Express C ++.

Saya mendapatkan masalah ini dengan modul Python 2.7 yang ditulis dalam C (yEnc, yang memiliki masalah lain dengan MS VS). Perhatikan bahwa Python 2.7 dibangun dengan versi MS VS 2008, bukan 2010!

Terlepas dari kenyataan itu gratis, cukup sulit untuk menemukan karena MS mempromosikan VS 2010. Namun, tautan langsung MSDN resmi masih berfungsi: periksa https://stackoverflow.com/a/15319069/2227298 untuk tautan unduhan.

KrisWebDev
sumber
Ya, cara terbaik adalah menginstal VS2008.
pylover
3

Jika Anda telah menginstal mingw

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

berfungsi, memaksa pip untuk membangun menggunakan kompiler mingw bukan milik Microsoft. Lihat di sini https://github.com/pypa/pip/issues/18 untuk detailnya (posting terakhir).

Nicolas78
sumber
3

Apakah Microsoft Visual C ++ Compiler untuk Python 2.7 di http://www.microsoft.com/en-us/download/details.aspx?id=44266 bukan solusi?

Michael
sumber
Bekerja untukku. Pesan kesalahan pada akhir pip install pysftp punya solusi inierror: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
Bob Stein
3

Cara termudah untuk menyelesaikan ini pada tahun 2016 adalah menginstal Chocolatey dan kemudian vcpython27paketnya. Buka Powershell:

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

Saya tidak tahu apakah sudah terlambat, tapi saya menemukan Microsoft Visual C ++ Compiler untuk Python 2.7 yang berbunyi

Pesan kesalahan khas yang akan Anda terima jika Anda memerlukan paket kompiler ini adalah Tidak dapat menemukan vcvarsall.bat

Semoga ini membantu!

mkamioner
sumber
2

Saya mendapat masalah yang sama dan telah menyelesaikannya saat ini.

"Google" memberi tahu saya bahwa saya perlu menginstal "Microsoft Visual C ++ Compiler untuk Python 2.7". Saya menginstal tidak hanya alat, tetapi juga Visual C ++ 2008 Reditributable, tetapi tidak membantu. Saya kemudian mencoba menginstal Visual C ++ 2008 Express Edition. Dan masalahnya telah hilang!

Coba instal Visual C ++ 2008 Express Edition!

Vova
sumber
2

memanggil import setuptoolsakan menambal distutils untuk memaksa kompatibilitas dengan Visual Studio. Memanggil vcvars32.batsecara manual akan mengatur lingkungan virtual dan mencegah kesalahan umum lainnya yang akan dilempar kompiler. Untuk VS 2017 file tersebut berada di

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

Berikut ini skrip pengaturan yang saya gunakan untuk mengkompilasi file .pyx dengan cepat ke .pyd: (Catatan: ini menggunakan modul pihak ketiga 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()
pengguna2682863
sumber
Memang, mengimpor setuptoolsmembantu, juga dalam hal kompilasi cython .
Basj
Bisakah Anda menjelaskan sedikit lebih detail? bagaimana cara memanggil vcvars32.bat secara manual? Saya memiliki kompilasi cython
Juni Juni
2

Gunakan tautan ini untuk mengunduh dan menginstal Visual C ++ 2015 Build Tools . Secara otomatis akan mengunduh visualcppbuildtools_full.exedan menginstal Visual C ++ 14.0 tanpa benar-benar menginstal Visual Studio. Setelah instalasi selesai, coba lagi pemasangan pip dan Anda tidak akan mendapatkan kesalahan lagi.

Saya telah mengujinya pada platform dan versi berikut:

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
Lalit Kumar B
sumber
1

Jika Anda ingin menginstal pyodbc pada kotak Windows yang tidak memiliki Visual Studio diinstal pilihan lain adalah menginstal pyodbc secara manual menggunakan distribusi biner.

Ini sangat berguna jika Anda tidak memiliki hak administrator pada mesin yang sedang bekerja dengan Anda dan sedang mencoba mengatur virtualenv .

Langkah:

  1. Unduh penginstal Windows terbaru dari sini (pyodbc-XXXwin-Y-py2.7.exe)
  2. Buka penginstal yang dapat dieksekusi menggunakan 7-Zip (atau WinRAR atau apa pun)
  3. Ekstrak pyodbc.pyd dan pyodbc-XXX-py2.7.egg-info dan letakkan di [python installation directory or virtualenv]\Lib\site-packages
  4. Tidak ada langkah 4 :)
Dane B
sumber
1

Dengan Python 3.4, ketergantungannya adalah pada Visual Studio 2010. Menginstal Visual C ++ 2010 Express memperbaiki masalah bagi saya.

Menipu untuk menggunakan pemasangan VS 2008 atau 2013 yang kebetulan saya tidak berhasil.

gmjonker
sumber
1

Anda dapat menggunakan easy_install sebagai ganti pip berfungsi untuk saya.

Abdul Majeed
sumber
Kesalahan yang samaerror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke
1

Jawaban yang diberikan oleh @monkey adalah salah satu yang benar, tetapi tidak lengkap.

Jika Anda ingin menggunakan MinGW , Anda harus memilih C, C ++ dan juga alat pengembangan lain yang disarankan selama proses instalasi MinGW untuk mendapatkan "make.exe."

Anda juga harus mengatur path ke make.exe di env.

Untuk melengkapi jawabannya, berikut adalah langkah-langkahnya:

  1. Tambahkan direktori bin mingw32 ke variabel lingkungan Anda
  2. Tambahkan C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;ke PATH
  3. Edit (buat jika tidak ada) distutils.cfgfile yang berada di C:\Python26\Lib\distutils\distutils.cfgmenjadi:

    [build]
    compiler=mingw32

Pastikan variabel lingkungan diatur dengan membuka cmd.exe baru.

Olivier N
sumber
Modul python 32 bit harus dikompilasi dengan mingw 32 bit, sedangkan modul python 64 bit harus dikompilasi dengan mingw 64 bit. Pada Cygwin 64 bit, ada 2 file executable mingw yang tersedia: x86_64-w64-mingw32-gccdan i686-w64-mingw32-gcc. Executable ini tampaknya sama dengan yang Anda dapatkan dari Mingw biasanya (hanya dikompilasi di dalam lingkungan Cygwin).
CMCDragonkai