lỗi: Không thể tìm thấy vcvarsall.bat


851

Tôi đã cố gắng cài đặt gói Python dulwich :

pip install dulwich

Nhưng tôi nhận được một thông báo lỗi khó hiểu:

error: Unable to find vcvarsall.bat

Điều tương tự cũng xảy ra nếu tôi thử cài đặt gói thủ công:

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

6
Để tham khảo trong tương lai, thật tuyệt khi thấy bạn sử dụng nền tảng này.
viam0Zah

47
Nếu bạn nghĩ rằng đây là một thông báo lỗi khó hiểu và vô ích, vui lòng bỏ phiếu cho lỗi tại bug.python.org/su2943
Đại tá Panic

48
Microsoft hiện cung cấp một giải pháp: microsoft.com/en-us/doad/details.aspx?id=44266
Martijn Pieters

6
@MartijnPieters Tôi đã thử tải xuống và cài đặt liên kết bạn đã cung cấp với bánh xe và setuptools 7.0 nhưng nó không hoạt động Tôi nhận được thông báo: 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 (một chàng trai trong nhóm Python của Microsoft) đã viết một bài đăng blog về giá trị này đọc chủ đề: blogs.msdn.microsoft.com/pythonengineering/2016/04/11/...
Cody Piersall

Câu trả lời:


683

Cập nhật : Nhận xét chỉ ra rằng các hướng dẫn ở đây có thể nguy hiểm. Cân nhắc sử dụng phiên bản Visual C ++ 2008 Express hoặc Trình biên dịch Microsoft Visual C ++ được xây dựng có mục đích cho Python ( chi tiết ) và KHÔNG sử dụng câu trả lời gốc bên dưới. Thông báo lỗi ban đầu có nghĩa là phiên bản bắt buộc của Visual C ++ chưa được cài đặt.


Đối với cài đặt Windows:

Trong khi chạy setup.py để cài đặt gói, Python 2.7 tìm kiếm Visual Studio đã cài đặt 2008. Bạn có thể lừa Python sử dụng Visual Studio mới hơn bằng cách đặt đường dẫn chính xác trong VS90COMNTOOLSbiến môi trường trước khi gọi setup.py.

Thực hiện lệnh sau dựa trên phiên bản Visual Studio đã cài đặt:

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

CẢNH BÁO: Như đã lưu ý dưới đây, câu trả lời này khó có thể hoạt động nếu bạn đang cố gắng biên dịch các mô-đun python.

Xem Xây dựng lxml cho Python 2.7 trên Windows để biết chi tiết.


21
Nó đã làm cho tôi :(
fmuecke

8
@Gili: Có vẻ như vấn đề này là do khoảng trắng trong biến, hãy thử gói nó trong dấu ngoặc kép. Đối với tôi% VS100COMNTOOLS% = "C: \ Chương trình tệp (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools"
legends2k

7
Điều này sẽ không hoạt động cho nhiều thứ, bởi vì Python dựa vào VS2008. Hãy xem câu trả lời này: stackoverflow.com/questions/6551724/ từ
shezi

182
CẢNH BÁO!!! Đây là câu trả lời SAU . Trong mọi trường hợp, bạn không nên biên dịch phần mở rộng Python C bằng cách sử dụng trình biên dịch (phiên bản) khác nhau mà trình biên dịch được sử dụng để tự biên dịch Python vì hai trình biên dịch (phiên bản) đó có thể sẽ có các thư viện thời gian chạy C không tương thích. Xem câu trả lời này để biết thêm chi tiết.
Piotr Dobrogost

72
Bạn có thể tải xuống Visual C ++ 2008 Express Edition miễn phí từ go.microsoft.com/?linkid=7729279 , sẽ đặt biến môi trường VS90COMNTOOLS trong khi cài đặt và do đó xây dựng với trình biên dịch tương thích.
Eric Smith

225

Tôi tìm thấy giải pháp. Tôi đã có cùng một vấn đề và lỗi, cài đặt 'amara'. Tôi đã cài đặt mingw32, nhưng cần phải cấu hình distutils.

  1. Tôi có Python 2.6 đã được cài đặt.
  2. Tôi đã cài đặt mingw32 để C:\programs\mingw\
  3. Thêm thư mục bin của mingw32 vào biến môi trường của bạn: nối c:\programs\MinGW\bin;vào PATH
  4. Chỉnh sửa (tạo nếu không tồn tại) tệp distutils.cfg nằm ở C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32
  5. Bây giờ chạy easy_install.exe amara.

Đảm bảo môi trường được thiết lập bằng cách mở một cái mới cmd.exe.


45
Điều này hoạt động rất tốt cho Python2.6, nhưng vì một số lý do tôi không thể làm cho nó hoạt động trên Python2.7. Nó hoạt động nếu tôi tải xuống nguồn gói của mình và cài đặt bằng 'python setup.py install --compile = mingw32', nhưng vì một số lý do sử dụng easy_install hoặc pip vẫn cố gắng tìm vcvarsall.
Jonathan Hartley

2
Cuối cùng tôi đã scikits.image để cài đặt trong Python (x, y) 2,7 bằng cách thêm C:\msysgit\mingw\mingw32\binC:\msysgit\mingw\binđể PATH sử dụng và khởi động lại Spyder trước khi chạy pip installmột lần nữa
endolith

20
Không cần phải bao giờ khởi động lại vì một sự thay đổi biến môi trường. Mở một quy trình cmd.exe mới là đủ.
Tomalak

11
Tôi vẫn không thể sửa cái này. Đây là lỗi: gcc: error: unrecognized command line option '-mno-cygwin' error: Setup script exited with error: command 'gcc' failed with exit status 1saueasy_install.exe amara
người dùng

5
@user, bạn nên mở tệp này: C:\Python27\Lib\distutils\cygwincompiler.pyvà xóa tất cả các phần của –mno-cygwinnó; điều này là do các phiên bản gần đây của GCC đã loại bỏ –mno-cygwintùy chọn và nó không nên ở đó.
Zeinab Abbasimazar

220

Bạn có thể cài đặt phiên bản được biên dịch từ http://www.lfd.uci.edu/~gohlke/pythonlibs/


15
chỉ là một mẹo: bạn có thể cài đặt gói từ trang web này trong virtualenv bằng cách chạy easy_install binary_installer_built_with_distutils.exetrong virtualenv, theo câu trả lời này .
yangzh

14
Mọi nhà phát triển Windows Python nên biết về điều này
Học sinh trung học

1
Bạn cũng có thể wheel convert ....execài đặt các trình cài đặt này và sau đó cài đặt chúng với pip bất cứ khi nào bạn muốn.
Zooba

3
Để chính xác hơn, lfd.uci.edu/~gohlke/pythonlibs/#mysql-python và sau khi tải xuống, hãy mở một thiết bị đầu cuối với tư cách quản trị viên và chạypython -m pip install <filename>
arun

Holly mẹ của Thiên Chúa, điều này là ngay tại chỗ. Hoạt động như một bùa mê, TY :)
Amir

162

Nếu bạn muốn biên dịch với Visual Studio C ++ thay vì mingw ...

  1. Chạy python.exeđể hiển thị phiên bản VC ++ nào được biên dịch (ví dụ hiển thị bên dưới).

    Nó là quan trọng để sử dụng phiên bản tương ứng của Visual C ++ biên dịch rằng Python đã được biên soạn với từ distilutils 's get_build_versionngăn chặn pha trộn các phiên bản ( mỗi cảnh báo Piotr của ).

    • Màu vàng (trên cùng) là Python 2.7, được biên dịch với MSC v.1500 (Visual Studio C ++ 2008)
    • Màu đỏ (dưới cùng) là Python 3.4.1, được biên dịch với MSC v.1600 (Visual Studio C ++ 2010)

    Ví dụ từ dòng lệnh hiển thị Python 2.7 được biên dịch với MSC v.1500 và Python 3.4.1 được biên dịch với MSC v.1600

  2. Sử dụng bảng bên dưới [1] để khớp phiên bản VC ++ nội bộ với bản phát hành Visual Studio tương ứng:

    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. Tải xuống và cài đặt phiên bản tương ứng của Visual Studio C ++ từ bước trước.
    Ghi chú bổ sung cho các phiên bản cụ thể của VC ++ được liệt kê bên dưới.

    Ghi chú cho Visual Studio C ++ 2008

    Đối với chỉ các trình biên dịch 32-bit, tải Visual Studio C ++ 2008 Express Edition .

    Đối với trình biên dịch 64 bit [2] [3] , hãy tải xuống Windows SDK cho Windows 7 và .NET Framework 3.5 SP1 .

    • Bỏ chọn mọi thứ ngoại trừ Developer Tools >> Visual C++ Compilersđể tiết kiệm thời gian và dung lượng ổ đĩa khỏi việc cài đặt các công cụ SDK mà bạn không cần.

    Ghi chú cho Visual Studio C ++ 2010

    Theo Microsoft, nếu bạn đã cài đặt Visual Studio 2010 SP1, nó có thể đã xóa trình biên dịch và thư viện cho VC ++.
    Nếu đó là trường hợp, tải xuống Cập nhật trình biên dịch Visual C ++ 2010 SP1 .

    Ghi chú cho Visual Studio C ++ 2015

    Nếu bạn không cần Visual Studio IDE, hãy tải xuống Visual Studio C ++ 2015 Build Tools .

    Ghi chú cho Visual Studio C ++ 2017

    Nếu bạn không cần Visual Studio IDE, hãy tải xuống Build Tools cho Visual Studio 2017 .

    Gợi ý : Nếu bạn có cả bản cài đặt Python 32 và 64 bit, bạn cũng có thể muốn sử dụng virtualenv để tạo các môi trường Python riêng biệt để bạn có thể sử dụng cái này hoặc cái kia một lúc mà không làm rối đường dẫn của bạn để chọn phiên bản Python nào sử dụng.

Theo @srodriguex , bạn có thể bỏ qua việc tải thủ công tệp bó (Bước 4-6) bằng cách sao chép một vài tệp bó vào nơi Python đang tìm kiếm bằng cách làm theo câu trả lời này . Nếu điều đó không hiệu quả, đây là các bước sau đây ban đầu làm việc cho tôi.

  1. Mở ra một cmd.exe

  2. Trước khi bạn thử cài đặt một cái gì đó yêu cầu các phần mở rộng C, hãy chạy tệp bó sau để tải môi trường của trình biên dịch VC ++ vào phiên (tức là các biến môi trường, đường dẫn đến trình biên dịch, v.v.).

    Hành hình:

    • Trình biên dịch 32 bit:

      Lưu ý : Cài đặt Windows 32 bit sẽ chỉ có C:\Program Files\như mong đợi

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

    • Trình biên dịch 64 bit:

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

      Lưu ý : Có, trình biên dịch 64 bit gốc đang ở trong Program Files (x86). Đừng hỏi tôi tại sao.
      Ngoài ra, nếu bạn đang tự hỏi sự khác biệt giữa vcvars64.batvcvarsx86_amd64.batquan trọng hơn là sự khác biệt giữa amd64x86_amd64, trước đây là dành cho các công cụ biên dịch 64 bit gốc và sau là các trình biên dịch chéo 64 bit có thể chạy trên bản cài đặt Windows 32 bit .

    Cập nhật:
    Nếu vì một số lý do bạn đang nhận error: ... was unexpected at this time.nơi ...một số hàng loạt các nhân vật, thì bạn cần phải kiểm tra xem bạn biến con đường không có bất kỳ nhân vật không liên quan như trích dẫn thêm hoặc các ký tự đi lạc. Tệp bó sẽ không thể cập nhật đường dẫn phiên của bạn nếu nó không có ý nghĩa về nó ở vị trí đầu tiên.

  3. Nếu mọi việc suôn sẻ, bạn sẽ nhận được một trong các thông báo sau tùy thuộc vào phiên bản VC ++ nào và lệnh nào bạn đã chạy:

    Đối với các công cụ biên dịch 32 bit:
    Setting environment for using Microsoft Visual Studio 20xx x86 tools.

    Đối với các công cụ biên dịch 64 bit:
    Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  4. Bây giờ , hãy chạy thiết lập qua python setup.py installhoặcpip install pkg-name

  5. Hy vọng và vượt qua các ngón tay của bạn rằng các hành tinh được căn chỉnh chính xác để VC ++ hợp tác.


Không thể khuyên bạn đủ để vượt qua nỗi đau khi di chuyển thẳng đến 64 bit. Đó chỉ là vấn đề thời gian trước khi bạn cần nhiều hơn 4gb không gian địa chỉ. Tôi nói từ kinh nghiệm đau đớn sau khi đã đi 32 bit bởi vì nó dễ dàng hơn nhiều, sau đó phải gỡ cài đặt mọi thứ bao gồm cả phụ thuộc và đi 64 bit. Gần như cả một ngày cuối tuần.
Thomas Browne

1
Sau đó, một lần nữa, tôi quên mất có bao nhiêu người sẽ phải sử dụng Python cho các nhiệm vụ lớn hơn như thế. Và @ThomasBrowne, tôi chắc chắn rằng đó là một trải nghiệm đau đớn và không cần thiết. Tôi đang xem xét nó, và hy vọng tôi có thể tìm thấy thứ gì đó. Vấn đề chính là Visual Studio C ++ 2008 Express không đi kèm với trình biên dịch 64 bit, nhưng tôi chắc chắn rằng nó ở đâu đó quanh đây.
Josh Bowden

Chỉ cần cập nhật nó với nhiều thông tin hơn về cách tải xuống trình biên dịch 64 bit nếu bạn cần chúng.
Josh Bowden

Trong trường hợp của tôi, tôi làm theo bước 1 ở trên và bỏ qua phần còn lại theo câu trả lời này . Bây giờ tôi có thể cài đặt các gói tránh sự khó chịu khi chạy .bat.
srodriguex

@srodriguex cũng vậy, có vẻ như Python đang giả định rằng các công cụ biên dịch 64 bit được tải vào PATH bằng cách sử dụng nó đang tìm kiếm ...\VC\bin\vcvarsamd64.bat...\VC\bin\amd64\vcvarsamd64.bat.
Josh Bowden

73

Chuyện gì đang xảy ra vậy? Các mô-đun Python có thể là một phần được viết bằng C hoặc C ++ (thường là tốc độ). Nếu bạn cố gắng cài đặt một gói như vậy với Pip (hoặc setup.py), nó phải biên dịch C / C ++ đó từ nguồn. Ra khỏi hộp, Pip sẽ mạnh dạn cho bạn trình biên dịch Microsoft Visual C ++ được cài đặt. Nếu bạn không có nó, bạn sẽ thấy thông báo lỗi khó hiểu này "Lỗi: Không thể tìm thấy vcvarsall.bat".

Giải pháp được quy định là cài đặt trình biên dịch C / C ++, Microsoft Visual C ++ hoặc MinGW (một dự án nguồn mở). Tuy nhiên, cài đặt và cấu hình hoặc là rất khó khăn. (Chỉnh sửa 2014: Microsoft đã xuất bản trình biên dịch C ++ đặc biệt cho Python 2.7)

Giải pháp đơn giản nhất là sử dụng các trình cài đặt Windows (.msi) của Christoph Gohlke cho các gói Python phổ biến. Anh ta xây dựng các trình cài đặt cho Python 2.x và 3.x, 32 bit và 64 bit. Bạn có thể tải chúng từ http://www.lfd.uci.edu/~gohlke/pythonlibs/


Nếu bạn cũng nghĩ "Lỗi: Không thể tìm thấy vcvarsall.bat" là một thông điệp khó hiểu và vô ích, thì vui lòng nhận xét về lỗi này tại http://bugs.python.org/su2943 để thay thế nó bằng một người dùng hữu ích và hữu ích hơn- tin nhắn thân thiện.

Để so sánh, Ruby giao hàng với trình quản lý gói Gem và cung cấp trình biên dịch C / C ++ chính thức, DevKit. Nếu bạn cố gắng cài đặt một gói mà không có nó, bạn sẽ thấy thông báo hữu ích hữu ích này:

Vui lòng cập nhật PATH của bạn để bao gồm các công cụ xây dựng hoặc tải xuống DevKit từ http://rubyinstaller.org/doads và làm theo hướng dẫn tại http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Bạn có thể đọc một bài viết dài hơn về bao bì Python tại https://stackoverflow.com/a/13445719/284795


Làm cách nào tôi có thể sử dụng pip để cài đặt tệp thực thi được biên dịch sẵn này trong môi trường ảo của mình?
Shailen

@shailenTJ câu hỏi hay. Tôi chưa bao giờ làm điều đó, nhưng hãy thử stackoverflow.com/a/5442340/284795
Đại tá Panic

Đây là giải pháp tốt nhất / dễ nhất mà tôi biết. Cảm ơn.
user1477388 17/12/13

Đó Sửa 2014 là câu trả lời tốt nhất cho tôi. Dễ bỏ lỡ hướng dẫn: đảm bảo bạn cập nhật setuptoolslên phiên bản 6.0hoặc cao hơn với pip install setuptools --upgrade.
orlade

64

Bạn sẽ cần cài đặt trình biên dịch Microsoft, tương thích với trình biên dịch được sử dụng để xây dựng Python. Điều này có nghĩa là bạn cần Visual C ++ 2008 (hoặc mới hơn, với một số điều chỉnh ).

Microsoft hiện nay cung cấp một trình biên dịch kèm và tiêu đề chỉ để có thể biên dịch các phần mở rộng Python, tại URL đáng nhớ:

Trình biên dịch Microsoft Visual C ++ cho Python 2.7

http://aka.ms/vcpython27

Đây là một gói tương đối nhỏ; 85MB để tải xuống, có thể cài đặt mà không cần quyền quản trị, không cần khởi động lại. Tên hơi sai lệch, trình biên dịch sẽ hoạt động cho bất kỳ phiên bản Python nào được biên dịch ban đầu với Visual C ++ 2008, không chỉ Python 2.7.

Nếu bạn bắt đầu một dấu nhắc tương tác hoặc in Python sys.version, hãy tìm MSCchuỗi phiên bản; nếu đó là MSC v.1500bạn có thể sử dụng công cụ này.

Từ thông báo ban đầu đến danh sách distutils :

Microsoft đã phát hành gói trình biên dịch cho Python 2.7 để giúp mọi người dễ dàng xây dựng và phân phối các mô-đun mở rộng C của họ trên Windows. Trình biên dịch Microsoft Visual C ++ cho Python 2.7 (còn gọi là VC9) có sẵn từ: http://aka.ms/vcpython27

Gói này chứa tất cả các công cụ và tiêu đề cần thiết để xây dựng các mô đun mở rộng C cho Python 2.7 32 bit và 64 bit (lưu ý rằng một số mô đun mở rộng yêu cầu phụ thuộc của bên thứ 3 như OpenSSL hoặc libxml2 không được bao gồm). Các phiên bản Python khác được xây dựng với Visual C ++ 2008 cũng được hỗ trợ, vì vậy "Python 2.7" chỉ là quảng cáo - nó sẽ hoạt động tốt với 2.6 và 3.2.

Lưu ý rằng bạn cần cài đặt setuptools6.0 hoặc mới hơn (được liệt kê trong yêu cầu hệ thống trên trang tải xuống). Dự án bạn đang cài đặt phải sử dụng setuptools.setup(), không distutilshoặc tự động phát hiện sẽ không hoạt động.

Microsoft đã tuyên bố rằng họ muốn giữ URL ổn định, để các tập lệnh tự động có thể tham chiếu dễ dàng.


2
Theo nhận xét khác của tôi, bạn có thể đảm bảo setuptoolsđược cập nhật với pip install setuptools --upgrade.
orlade

Tôi đã xem xét vấn đề tại sao logic có liên quan setuptoolschứ không phải distutils- xét cho cùng, xây dựng các mô-đun là chức năng cốt lõi và nó có mã liên quan, nhưng là phiên bản cũ hơn của nó. Có vẻ như các nhà distutilsbảo trì đã từ bỏ việc hỗ trợ tất cả các biến thể MSSDK có thể và đổ công việc này cho các setuptoolsđồng nghiệp của họ , những người háo hức hơn.
ivan_pozdeev

1
@ivan_pozdeev: setuptoolscũng có thể phát hành thường xuyên hơn nhiều so với distutils, bao gồm trong chu trình phát hành Python có thể. Và distitutilsthực sự đã đi vào một chế độ bảo trì các loại, với công việc trên các hệ thống mới dự kiến ​​sẽ thay thế nó. Công việc đó bị đình trệ thay thế.
Martijn Pieters

cython sử dụng distutils, bạn cần nhập setuptools mà khỉ-patch distutils: github.com/cython/cython/wiki/CythonExtensionsOnWindows
denfromufa

54

Tôi cũng gặp vấn đề tương tự, vì vậy tôi sẽ kể câu chuyện của mình ở đây với hy vọng nó sẽ giúp người khác có cùng vấn đề và cứu họ trong vài giờ tôi vừa trải qua:

Tôi có mingw (g ++ (GCC) 4.6.1) và python 2.7.3 trong hộp windows 7 và tôi đang cố gắng cài đặt PyCrypto.

Tất cả bắt đầu với lỗi này khi chạy cài đặt setup.py:

error: Unable to find vcvarsall.bat

Dễ dàng giải quyết sau khi googling lỗi bằng cách chỉ định mingw là trình biên dịch lựa chọn:

setup.py install build --compiler=mingw32

Vấn đề là sau đó tôi đã gặp một lỗi khác:

configure: error: cannot run C compiled programs.

Hóa ra là phần mềm chống vi-rút của tôi đã chặn việc thực thi một phần mềm mới được biên dịch. Tôi vừa vô hiệu hóa "lá chắn cư trú" chống vi-rút và đi đến lỗi tiếp theo:

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

Điều này đã giải quyết nó: "Hoặc cài đặt một phiên bản MinGW cũ hơn một chút hoặc chỉnh sửa distutils \ cygwinccompiler.py trong thư mục Python của bạn để xóa tất cả các phiên bản của -mno-cygwin." (từ đây )

Bây giờ, cuối cùng tôi có thể bắt đầu làm việc.


7
Bạn cũng sẽ cần một phiên bản thư viện Python tương thích với MinGW. Xem eli.thegreenplace.net/2008/06 / 28 / để biết thêm thông tin
Gili

Xoắn và rẽ: D
Xilpex

23

Có vẻ như nó đang tìm kiếm trình biên dịch VC, vì vậy bạn có thể thử đề cập đến loại trình biên dịch với -c mingw32, vì bạn có msys

python setup.py install -c mingw32

16
Chỉ cần clairify, lệnh hoạt động là: python setup.py build --compiler=mingw32tiếp theopython setup.py install
Emil Stenström

Sau khi chạy python setup.py build --compiler = mingw32 Tôi nhận được ImportError: Không có mô-đun nào có tên Cython.Distutils trong khi Cython được cài đặt dưới Anaconda. Bất kỳ đề xuất?
Serendipity

20

Tôi có python 2,73 và windows 7. Giải pháp hiệu quả với tôi là:

  1. Đã thêm thư mục bin của mingw32 vào biến môi trường: nối PATH vớiC:\programs\mingw\bin;
  2. Tạo distutils.cfg tại C:\Python27\Lib\distutils\distutils.cfgchứa:

    [build]
    compiler=mingw32

Để đối phó với MinGW không nhận ra cờ -mno-cygwin nữa, hãy xóa cờ trong C: \ Python27 \ Lib \ distutils \ cygwincompiler.py dòng 322 đến 326, vì vậy nó trông như thế này:

  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

Nhìn vào setup.pytập tin của gói bạn đang cố cài đặt. Nếu nó là một gói cũ hơn nó có thể được nhập khẩu distutils.core.setup()hơn là setuptools.setup().

Tôi đã tham gia vào điều này (năm 2015) với sự kết hợp của các yếu tố sau:

  1. Trình biên dịch Microsoft Visual C ++ cho Python 2.7 từ http://aka.ms/vcpython27

  2. Một gói cũ hơn sử dụng distutils.core.setup()

  3. Cố gắng làm python setup.py buildhơn là sử dụng pip.

Nếu bạn sử dụng một phiên bản gần đây của pip, nó sẽ buộc (khỉpatch) gói sử dụng setuptools, ngay cả khi nó setup.pygọi cho distutils. Tuy nhiên, nếu bạn không sử dụng pip, và thay vào đó chỉ đang thực hiện python setup.py build, quá trình xây dựng sẽ sử dụng distutils.core.setup(), không biết về vị trí cài đặt trình biên dịch.


Giải pháp

Bước 1: Mở Dấu nhắc lệnh Visual C ++ 2008 thích hợp

Mở menu Bắt đầu hoặc màn hình Bắt đầu và tìm kiếm "Dấu nhắc lệnh 32 bit Visual C ++ 2008" (nếu python của bạn là 32 bit) hoặc "Dấu nhắc lệnh 64 bit của Visual C ++ 2008" (nếu python của bạn là 64 bit) . Chạy nó Dấu nhắc lệnh sẽ nói Visual C ++ 2008 ... trong thanh tiêu đề.

Bước 2: Đặt biến môi trường

Đặt các biến môi trường này trong dấu nhắc lệnh bạn vừa mở.

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

Tham khảo http://bugs.python.org/su23246

Bước 3: Xây dựng và cài đặt

cdđể gói bạn muốn xây dựng, và chạy python setup.py build, sau đó python setup.py install. Nếu bạn muốn cài đặt vào virtualenv, hãy kích hoạt nó trước khi bạn xây dựng.


bạn cũng có thể xây dựng gói của mình bằng cách sử dụng <code> pip </ code> thay vì <code> python setup.py build </ code>
aronadaal

9

Có lẽ ai đó có thể quan tâm, những điều sau đây làm việc cho tôi cho gói py2exe. (Tôi có windows 7 64 bit và python di động 2.7, Visual Studio 2005 Express với Windows SDK cho Windows 7 và .NET Framework 4)

set VS90COMNTOOLS=%VS80COMNTOOLS%

sau đó:

python.exe setup.py install

Không, bạn nói đúng, tôi không chắc chuyện gì đã xảy ra, tôi sẽ xóa bình luận ban đầu.
Dave Challis

1
Rất hữu ích!! Trong trường hợp của tôi, tôi đã thực hiện 'đặt VS90COMNTOOLS =% VS110COMNTOOLS%'.
jrvidotti

@Exzile: có, bạn nhập các lệnh này trong cùng một phiên nhắc lệnh
Stefano Fenu

ĐỪNG LÀM NÀY !!! Xem câu trả lời này để biết thêm chi tiết.
Ẩn danh

8

Tôi đã dành gần 2 ngày để tìm ra cách khắc phục sự cố này trong phiên bản python 3.4 64 bit của mình: Python 3.4.3 (v3.4.3: 9b73f1c3e601, ngày 24 tháng 2 năm 2015, 22:44:40) [MSC v.1600 64 bit (AMD64 )] trên win32

Giải pháp 1, khó: (trước khi đọc, hãy đọc Giải pháp 2 bên dưới) Cuối cùng, đây là điều đã giúp tôi:

  1. cài đặt Visual C ++ 2010 Express
  2. cài đặt Microsoft Windows SDK v7.1 cho Windows 7
  3. tạo tập tin thủ công vcvars64.battrong C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64đó có chứa CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64hoặc đường dẫn khác tùy thuộc vào nơi bạn đã cài đặt
  4. (điều này dường như là tùy chọn) cài đặt Microsoft Visual Studio 2010 Gói dịch vụ 1 cùng với Cập nhật trình biên dịch Microsoft Visual C ++ 2010 Gói dịch vụ 1 cho Windows SDK 7.1
  5. sau đó tôi đã cố gắng pip install numpynhưng nhận được lỗi sau:

    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

    Tôi đã thay đổi mfinfođến Nonetrong C:\Python34\Lib\distutils\msvc9compiler.pymỗi này https://stackoverflow.com/a/23099820/4383472

  6. cuối cùng sau khi ra pip install numpylệnh, phần mềm diệt virus avast của tôi đã cố gắng can thiệp vào quá trình cài đặt, nhưng tôi đã nhanh chóng vô hiệu hóa nó

Phải mất rất lâu - vài phút để numpy biên dịch, tôi thậm chí đã nghĩ rằng có lỗi, nhưng cuối cùng mọi thứ đều ổn.

Giải pháp 2, dễ dàng: (Tôi biết cách tiếp cận này đã được đề cập trong một câu trả lời được đánh giá cao , nhưng hãy để tôi nhắc lại vì nó thực sự dễ dàng hơn) Sau khi trải qua tất cả công việc này, tôi hiểu rằng cách tốt nhất đối với tôi là chỉ sử dụng nhị phân được biên dịch sẵn từ http://www.lfd.uci.edu/~gohlke/pythonlibs/ trong tương lai. Có một cơ hội rất nhỏ rằng tôi sẽ cần một số gói (hoặc một phiên bản của gói) mà trang web này không chứa. Quá trình cài đặt cũng nhanh hơn nhiều theo cách này. Ví dụ: để cài đặt numpy:

  1. donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(nếu bạn có Python 3,4 64-bit) từ trang web đó
  2. trong dấu nhắc lệnh hoặc powershell cài đặt nó với pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(hoặc đường dẫn đầy đủ đến tệp tùy thuộc vào cách mở dấu nhắc lệnh)

numpy ‑ 1.9.2 + mkl ‑ cp34 none ‑ win_amd64.whl - không thể tìm thấy tệp này trên liên kết trên.
Amresh Giri

7

Tôi muốn chạy pysph trên Windows 10 trong Python 2.7 và không tìm thấy vcvarsall.bat (từ distutils)

Giải pháp của tôi là như sau:

Cài đặt Microsoft Visual C ++ cho Python 2.7 (như @Michael đề xuất)

Trên Windows 10, nó đã được cài đặt vào (tên người dùng của tôi là Andreas):

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

Đặt biến môi trường VS90COMNTOOLS thành đường dẫn cài đặt Visual C ++ cho Python 2.7 (xem đường dẫn ở trên).

Nếu nó vẫn không hoạt động, thì modifiy trong mô-đun

C:/Python27/lib/distutils

tập tin msvc9compiler.py . Tìm trong đó hàm find_vcvarsall và thực hiện sửa đổi sau.

Thay thế dòng:

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

với

productdir = os.path.join(toolsdir)

Đây là nơi vcvarsall.bat cư trú trong trường hợp của tôi (kiểm tra, nơi vcvarsall.bat có trong bản cài đặt của bạn).


Thật thú vị %userprofile%\Appdata\Local\Programs\Commonlà trống rỗng cho tôi.
Bryce Guinta

Ngay cả sau khi cài đặt Microsoft Visual C ++ cho Python 2.7?
Chiefenne

7

Tôi gặp phải vấn đề này khi tôi cố gắng cài đặt thư viện numpy trên python 3.5 của tôi. Giải pháp là cài đặt VS2015. Tôi đã có VS2008, 2012, 2013, không có cái nào tương thích với python 3.5. Rõ ràng phiên bản mới hơn của python có sự phụ thuộc vào các phiên bản mới hơn của VS.

Đồng thời đảm bảo C ++ Common Tools được cài đặt với Visual Studio.

nhập mô tả hình ảnh ở đây


6

Tôi đã thử tất cả các câu trả lời ở trên và thấy tất cả chúng đều không hoạt động, có lẽ tôi đang sử dụng Windows 8 và đã cài đặt Visual Studio 2012. Trong trường hợp này, đây là những gì bạn làm.

Các vcvarsall.battập tin được đặt ở đây: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

Chỉ cần chọn tệp và sao chép nó.

Sau đó vào thư mục này: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

và dán tập tin. Và sau đó, tất cả nên được tốt.


Không có tất cả là không tốt Tôi đã làm theo câu trả lời của bạn nhưng tôi vẫn nhận được cùng một lỗi.
St ngu_Itern 5/12/2015

6

Bạn có thể tải xuống Visual C ++ 2008 Express Edition miễn phí từ http://go.microsoft.com/?linkid=7729279 , sẽ đặt biến môi trường VS90COMNTOOLS trong khi cài đặt và do đó xây dựng với trình biên dịch tương thích.

Như @PiotrDobrogost đã đề cập trong một bình luận, câu trả lời của anh cho câu hỏi khác này đi vào chi tiết về lý do tại sao Visual C ++ 2008 là thứ phù hợp để xây dựng, nhưng điều này có thể thay đổi khi bản dựng Python của Windows chuyển sang các phiên bản mới hơn của Visual Studio: Building lxml cho Python 2.7 trên Windows


Cũng đảm bảo không có phiên bản khác được cài đặt. Tôi đã có một thời gian khó khăn với điều này. Tôi định dạng lại máy tính, và chỉ cài đặt phiên bản này. Vì việc loại bỏ nhiều phiên bản của VS sẽ khiến tôi mất nhiều thời gian.
jmunsch

6

Tôi gặp vấn đề này khi sử dụng Python 3.4.1 trên Windows 7 x64 và thật không may, các gói tôi cần không có exe hoặc bánh xe phù hợp mà tôi có thể sử dụng. Hệ thống này yêu cầu một vài "cách giải quyết", được nêu chi tiết bên dưới (và TLDR ở phía dưới ).

Sử dụng thông tin trong câu trả lời của Jaxrtech ở trên , tôi xác định tôi cần Visual Studio C ++ 2010 (sys.version return MSC v.1600), vì vậy tôi đã cài đặt Visual C ++ 2010 Express từ liên kết trong câu trả lời của anh ấy, đó là http://go.microsoft .com /? linkid = 9709949 . Tôi đã cài đặt mọi thứ với các bản cập nhật, nhưng như bạn có thể đọc bên dưới, đây là một sai lầm. Chỉ nên cài đặt phiên bản gốc của Express tại thời điểm này (không cập nhật bất cứ điều gì).

vcvarsall.bat đã có mặt, nhưng đã xảy ra lỗi mới khi cài đặt gói query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']. Có các câu hỏi stackoverflow khác với lỗi này, chẳng hạn như Lỗi trong khi xây dựng / cài đặt mô-đun C cho Python 2.7

Tôi xác định từ câu trả lời đó là 2010 Express chỉ cài đặt trình biên dịch 32 bit. Để có được trình biên dịch 64 bit (và các trình biên dịch khác), bạn cần cài đặt Windows 7.1 SDK. Xem http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

Điều này sẽ không cài đặt cho tôi mặc dù và trình cài đặt đã trả về lỗi installation failed with return code 5100. Tôi đã tìm thấy giải pháp tại liên kết sau: http://support.microsoft.com/kb/2717426 . Nói tóm lại, nếu các phiên bản mới hơn của x86 và x64 Microsoft Visual C ++ 2010 Redistributable được cài đặt, chúng sẽ xung đột với các phiên bản trong trình cài đặt SDK và trước tiên cần gỡ cài đặt.

SDK sau đó đã được cài đặt, nhưng tôi nhận thấy vcvars64.bat vẫn không tồn tại C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin, cũng như các thư mục con của nó. vcvarsall.bat chạy tệp bó vcvars64, vì vậy không có nó, gói python vẫn không cài đặt (tôi quên lỗi đã được hiển thị tại thời điểm này).

Sau đó tôi tìm thấy một số hướng dẫn ở đây: http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Doad_VS_2010_and_Windows_SDK_7.1 Theo hướng dẫn, tôi đã cài đặt SDK Express và 7.1, và đã cài đặt SDK 7.1 SP1 thiếu tiêu đề sửa tệp. Sau đó tôi tự tạo vcvars64.bat bằng nội dung CALL setenv /x64. Tôi sẽ dán tất cả các hướng dẫn ở đây để chúng không bị lạc.

Bước 1 là tải xuống Visual Studio Express 2010.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express là một nơi tốt để bắt đầu. Tải xuống trình cài đặt và chạy nó (vc_web.exe). Bạn không cần tải xuống bổ sung SQL 2008.

Bạn cũng sẽ cần SDK Windows (hiện là 7.1) cho trình biên dịch 64 bit - trừ khi bạn muốn thực hiện các bản dựng chỉ 32 bit, không được hỗ trợ đầy đủ ...

http://www.microsoft.com/en-us/doad/details.aspx?id=8279 là điểm khởi đầu tốt để tải xuống cái này - bạn sẽ muốn chạy windk_web.exe khi tải xuống!

Cài đặt mặc định ở đây là tốt.

Cuối cùng, tải xuống và cài đặt bản cập nhật Windows SDK 7.1 SP1: http://www.microsoft.com/en-us/doad/details.aspx?id=4422

Và, để sửa tệp tiêu đề bị thiếu, VS2010 SP1. http://www.microsoft.com/doads/en/conf Confirmation.aspx? F FamilyID = 75568aa6-8107-475d-948a-ef22627e57a5

Và, địa ngục đẫm máu, sửa tệp bó bị thiếu cho VS2010 Express. Điều này là hết sức vô lý.

Trong C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64, tạo "vcvars64.bat" bằng cách sau (bạn sẽ cần phải chạy với tư cách quản trị viên):

GỌI setenv / x64

Gói python của tôi vẫn không cài đặt (không thể gọi lại lỗi). Sau đó, tôi đã tìm thấy một số hướng dẫn (được sao chép bên dưới) để sử dụng Dấu nhắc lệnh SDK 7.1 đặc biệt, xem: https://mail.python.org/pipermail/distutils-sig/2012-F/2/018300.html

Đừng bận tâm câu hỏi này. Ai đó ở đây nhận thấy mục này trên menu: Bắt đầu-> Tất cả chương trình-> Microsoft Windows SDK v7.1 -> Dấu nhắc lệnh Windows SDK 7.1

Điều này chạy một công việc hàng loạt xuất hiện để thiết lập một môi trường làm việc cho trình biên dịch. Từ lời nhắc đó, bạn có thể nhập "setup.py build" hoặc "setup.py install".

Tôi đã mở Windows SDK 7.1 Command Prompt theo hướng dẫn và sử dụng nó để chạy easy_install trên gói python. Và cuối cùng, thành công!


TLDR ;

  1. Cài đặt Visual Studio Express 2010 (tốt nhất là không có bản phân phối lại hoặc máy chủ SQL được cập nhật).
  2. Cài đặt SDK Windows 7.1
  3. Cập nhật SDK 7.1 SP1 ngay lập tức và sửa lỗi tệp tiêu đề VS2010 SP1 (bước này có thể không bắt buộc).
  4. Tạo thủ công C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batvới nội dungCALL setenv /x64
  5. Bắt đầu-> Tất cả chương trình-> Microsoft Windows SDK v7.1 -> Lệnh Windows SDK 7.1 Nhắc để mở dấu nhắc lệnh x64 đặc biệt, sau đó có thể được sử dụng với python / easy_install / pip / etc (bao gồm cả trong virtual_envs).

4

Các bước dưới đây đã khắc phục sự cố này cho tôi, tôi đã cố gắng tạo thiết lập với tiện ích mở rộng cython.

  1. Cài đặt Trình biên dịch Microsoft Visual C ++ cho Python 2.7
  2. Vị trí cài đặt mặc định sẽ là @ C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ cho Python Điều này thực sự có thể khắc phục sự cố, kiểm tra một lần trước khi tiếp tục.
  3. Nếu thất bại, hãy kiểm tra vị trí trong VC ++ để tìm tệp python vcvarsall.bat
  4. Mở tệp msvc9compiler.py của gói distutils trong notepad.
  5. Trong hộp của tôi, đây là @ C: \ Anaconda2 \ Lib \ distutils \ msvc9compiler.py find_vcvarsall trong tệp này, xác định phiên bản của VC bằng cách in ra đối số phiên bản. Đối với Python 2.7, nó có khả năng là 9.0
  6. Bây giờ hãy tạo biến môi trường VS90COMNTOOLS, trỏ đến C: \ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ cho Python \ 9.0 \ VC \ bin
  7. Vì một số lý do, distutils hy vọng tệp vcvarsall.bat nằm trong thư mục VC, nhưng VC ++ cho các công cụ python có trong thư mục gốc 9.0 Để sửa lỗi này, hãy xóa "VC" khỏi path.join (khoảng khoảng dòng 247)

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

Các bước trên đã khắc phục sự cố cho tôi.


Tôi đang gặp lỗi liên kết khi thực hiện theo các bước trên LINK: error LNK2001: chưa giải quyết biểu tượng bên ngoài init__init__ build \ temp.win-amd64-2.7 \ Release_ init_ .lib: lỗi nghiêm trọng LNK1120: 1 lỗi bên ngoài chưa được giải quyết: lệnh 'C: \\ Users \\ ma306477 \\ AppData \\ Local \\ Programs \\ Common \\ Microsoft \\ Visual C ++ cho Python \\ \\ 9.0 VC \\ \\ Bin amd64 \\ link.exe' thất bại với trạng thái thoát 1120
Manish Prasad

3

Tôi đã thử nhiều giải pháp nhưng chỉ có một giải pháp cho tôi, đó là bản cài đặt Microsoft Visual Studio 2008 Express C ++.

Tôi gặp vấn đề này với mô-đun Python 2.7 được viết bằng C (yEnc, có vấn đề khác với MS VS). Lưu ý rằng Python 2.7 được xây dựng với phiên bản MS VS 2008, không phải 2010!

Mặc dù thực tế là nó miễn phí, nhưng khá khó để tìm thấy vì MS đang quảng cáo VS 2010. Tuy nhiên, các liên kết trực tiếp chính thức của MSDN vẫn hoạt động: kiểm tra https://stackoverflow.com/a/15319069/2227298 để biết các liên kết tải xuống.


Có, cách tốt nhất là cài đặt VS2008.
pylover

3

Nếu bạn đã cài đặt

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

hoạt động, buộc pip phải xây dựng bằng trình biên dịch mingw thay vì của Microsoft. Xem tại đây https://github.com/pypa/pip/issues/18 để biết chi tiết (bài cuối).



3

Cách dễ nhất để giải quyết điều này trong năm 2016 là cài đặt Chocolatey và sau đó là vcpython27gói. Mở Powershell:

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


2

Tôi đã có cùng một vấn đề và đã giải quyết nó vào lúc này.

"Google" nói với tôi rằng tôi cần cài đặt "Trình biên dịch Microsoft Visual C ++ cho Python 2.7". Tôi không chỉ cài đặt công cụ mà còn cả Visual C ++ 2008 Reditributable, nhưng nó không giúp được gì. Sau đó tôi đã cố gắng cài đặt Visual C ++ 2008 Express Edition. Và vấn đề đã biến mất!

Chỉ cần thử cài đặt Visual C ++ 2008 Express Edition!


2

việc gọi import setuptoolskhỉ sẽ sửa lỗi distutils để buộc tương thích với Visual Studio. Gọi vcvars32.batthủ công sẽ thiết lập môi trường ảo và ngăn các lỗi phổ biến khác mà trình biên dịch sẽ ném. Đối với VS 2017, tệp được đặt tại

"C: \ Tệp chương trình (x86) \ Microsoft Visual Studio \ 2017 \ Cộng đồng \ VC \ Phụ trợ \ Build \ vcvars32.bat"

Đây là tập lệnh thiết lập mà tôi sử dụng để biên dịch nhanh các tệp .pyx thành .pyd: (Lưu ý: nó sử dụng mô-đun bên thứ 3 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()

Thật vậy, nhập setuptoolsgiúp, cũng trong trường hợp biên dịch cython .
Basj

bạn có thể giải thích chi tiết hơn một chút không? Làm thế nào để gọi vcvars32.bat bằng tay? Tôi đang biên dịch cython
Tháng Sáu Wang

2

Sử dụng liên kết này để tải xuống và cài đặt Visual C ++ 2015 Build Tools . Nó sẽ tự động tải xuống visualcppbuildtools_full.exevà cài đặt Visual C ++ 14.0 mà không cần cài đặt Visual Studio. Sau khi cài đặt hoàn tất, thử lại cài đặt pip và bạn sẽ không gặp lại lỗi.

Tôi đã thử nghiệm nó trên nền tảng và phiên bản sau:

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

Nếu bạn đang tìm cách cài đặt pyodbc trên hộp Windows không cài đặt Visual Studio, một tùy chọn khác là cài đặt thủ công pyodbc bằng cách sử dụng phân phối nhị phân.

Điều này đặc biệt hữu ích nếu bạn không có quyền quản trị viên trên máy bạn đang làm việc và đang cố gắng thiết lập virtualenv .

Các bước:

  1. Tải xuống trình cài đặt Windows mới nhất từ đây (pyodbc-XXXwin-Y-py2.7.exe)
  2. Mở trình cài đặt có thể thực thi bằng 7-Zip (hoặc WinRAR hoặc bất cứ thứ gì)
  3. Trích xuất pyodbc.pyd và pyodbc-XXX-py2.7.egg-thông tin và đặt chúng vào [python installation directory or virtualenv]\Lib\site-packages
  4. Không có bước 4 :)

1

Với Python 3.4, sự phụ thuộc nằm ở Visual Studio 2010. Cài đặt Visual C ++ 2010 Express đã khắc phục sự cố cho tôi.

Lừa nó bằng cách sử dụng các cài đặt VS 2008 hoặc 2013 mà tôi tình cờ không hoạt động.


1

Bạn có thể sử dụng easy_install thay vì pip nó hoạt động với tôi.


Lỗi tương tựerror: Setup script exited with error: Unable to find vcvarsall.bat
Stephan Schielke

1

Câu trả lời được đưa ra bởi @monkey là một trong những câu trả lời đúng, nhưng nó không đầy đủ.

Trong trường hợp bạn muốn sử dụng MinGW , bạn nên chọn C, C ++ và các công cụ phát triển khác được đề xuất trong quá trình cài đặt MinGW để nhận "make.exe".

Bạn cũng phải có đường dẫn được đặt thành make.exe trong env.

Để hoàn thành câu trả lời của mình, đây là các bước:

  1. Thêm thư mục bin của mingw32 vào các biến môi trường của bạn
  2. Nối C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;vào ĐƯỜNG
  3. Chỉnh sửa (tạo nếu nó không tồn tại) distutils.cfgtệp nằm ở C:\Python26\Lib\distutils\distutils.cfg:

    [build]
    compiler=mingw32

Đảm bảo các biến môi trường được đặt bằng cách mở cmd.exe mới.


Các mô-đun python 32 bit nên được biên dịch với mingw 32 bit, trong khi các mô-đun python 64 bit nên được biên dịch với mingw 64 bit. Trên Cygwin 64 bit, có 2 tệp thực thi có sẵn: x86_64-w64-mingw32-gcci686-w64-mingw32-gcc. Các tệp thực thi này rõ ràng giống như các tệp mà bạn nhận được từ Mingw thông thường (chỉ được biên dịch trong môi trường Cygwin).
CMCDragonkai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.