2012-06-29 21 views
12

पर पाइथन मॉड्यूल संकलित करना मैं कुछ प्रसंस्करण शब्दों में प्रसंस्करण में शुरू कर रहा हूं और मुझे NumPy और NLTK की आवश्यकता है। पहली बार मुझे easy_install और सिस्टम में पायथन के नए मॉड्यूल को संकलित करने का तरीका मिला।विंडोज x64

मेरे पास पाइथन 2.7 x64 प्लस वीएस 11 और वीएस 12 है। इसके अलावा सिगविन (मुझे लगता है कि नवीनतम)। मैं उस फ़ाइल में देख सकता हूं जो वीएस का उपयोग करके संकलित करता है कि यह उसी संस्करण के साथ वीएस एनवी की तलाश करता है जो कि पाइथन कोड संकलित करता है, क्यों? जब मैंने 11.0 हार्डकोड किया जो मेरा संस्करण है, तो vcvarsall (vcvarsall) के बारे में कई अजीब त्रुटियों पर निर्माण करने में असफल रहा, शायद इसे दुरुपयोग किया गया)।

क्या मैं विंडोज़ पर पाइथन बाइनरी नहीं बना सकता? यदि नहीं, तो क्या मैं विंडोज के लिए लिनक्स पर संकलन पार कर सकता हूं? (एंड्रॉइड एसडीके के लिए Google के समान विधि का उपयोग करके)

+0

विंडोज़ पर बाइनरी एक्सटेंशन बनाना कुख्यात रूप से मुश्किल है। अफसोस की बात है [पायथन पैकेजिंग उपयोगकर्ता मार्गदर्शिका] (http://python-packaging-user-guide.readthedocs.org/en/latest/) अपूर्ण है [इस विषय पर] (https://packaging.python.org/en/ नवीनतम/एक्सटेंशन/# इमारत-द्विआधारी-एक्सटेंशन)। योगदान स्वागत है। –

+0

संभावित डुप्लिकेट [त्रुटि: vcvarsall.bat खोजने में असमर्थ] (http://stackoverflow.com/questions/2817869/error-unable-to-find-vcvarsall-bat) –

उत्तर

27

अद्यतन:Zooba के रूप में नीचे का उल्लेख है, free x86 and AMD64 (x86-64) VC90 c-compilers for Python-2.7 are now available from Microsoft

अद्यतन:Patch vcvarsall.bat बजाय एसडीके खोल का उपयोग कर और नीचे दिए गए निर्देशों के रूप DISTUTILS_USE_SDK और MSSdk पर्यावरण चर स्थापित करने के किसी भी खोल में pip के साथ सीधे एसडीके v7.0 से 64 compilers उपयोग करने के लिए। Fix vcvarsall.bat to install Python-2.7 x64 extensions with v90 instead of sdk7 देखें।

tl; डॉ: उपयोग विंडोज एसडीके v7.0 compilers, एसडीके खोल खोल सकते हैं और फोन

C:\> setenv /release /x64 
C:\> set DISTUTILS_USE_SDK=1 
C:\> MSSdk=1 

, distutils का उपयोग कर pip या easy_install पायथन 2.7.x एक्सटेंशन बनाने के लिए। Python x64 Package Extensions with pip, MSVC 2008 Express & SDK 7 देखें।

नोट: आप Numpy optimized using Intel MKL from Christoph Gohlke इंस्टॉल कर सकते हैं। वर्चुअलएन्व के लिए, बाइनरी वितरण विंडोज इंस्टालर को wheel फ़ाइल में कनवर्ट करने का प्रयास करें जिसे पीआईपी के साथ स्थापित किया जा सकता है। स्रोत से NumPy बिल्डिंग छोटा नहीं है। यह OpenBLAS की हालिया परिचय और उपलब्धता के साथ एक संभावना बन गया है, GotoBLAS का कांटा। optimized binaries available for Windows x86 and x86-64 के साथ-साथ स्रोत भी है जो GotoBLAS या ATLAS से संकलित करने के लिए अपेक्षाकृत सरल है।

नोट: अतीत में मैं स्रोत से NumPy संकलन है क्योंकि आप अपने मंच है जो बहुत समय गहन था के लिए BLAS अनुकूलन करने के लिए किया था की सिफारिश नहीं की थी, और संदर्भ Blas (FORTRAN) या CBLAS (C/C++) कार्यान्वयन अपेक्षाकृत कम प्रदर्शन कर रहे थे। इसके अलावा NumPy LAPACK पर निर्भर करता है जो बीएलएएस पर न्यूमपी बनाने के लिए अतिरिक्त बाधा पर निर्भर करता है। हालांकि ओपनबीएलएस बाइनरी पहले से ही LAPACK के साथ संकलित हैं, इसलिए इस बाधा को पहले ही हटा दिया जा चुका है। Carl Kleffner's static MinGW-w64 toolchains to build NumPy with OpenBLAS on Windows देखें - उन्होंने कुछ एबीआई असंगतताओं और पाइथन -77 के लिए सही माइक्रोसॉफ्ट विजुअल सी कॉमन रनटाइम लाइब्रेरी (msvcr90.dll) से जुड़े मुद्दों को हल किया है।

तो विंडोज 7 x64 पर पायथन एक्सटेंशन स्थापित करने के बारे में मुख्य प्रश्न के आगे।

एक्सटेंशन संकलित करने का अनुशंसित तरीका पाइथन साझा लाइब्रेरी [1-3] संकलित करने के लिए उपयोग किए गए समान कंपाइलर का उपयोग करना है। official Python 2.7.x for Windows को Microsoft Visual C++ Compilers version 9.0 [4] (aka MSVC90 or simply VC90) from Microsoft Visual Studio 2008 Professional का उपयोग करके संकलित किया गया था, जिसे आप Microsoft DreamSpark से मुक्त करने में सक्षम हो सकते हैं। स्पष्ट रूप से x64 संकलक डिफ़ॉल्ट रूप से स्थापित नहीं हैं, इसलिए सुनिश्चित करें कि वे x86 कंपाइलर्स के साथ स्थापित हैं। नोट: एमएस विजुअल स्टूडियो 2008 अब उपलब्ध नहीं हो सकता है, लेकिन एमएस विजुअल स्टूडियो 2010 आपको स्थापित करने पर MSVC90 टूलचैन का उपयोग करने देगा, जिसे विंडोज एसडीके 7 से स्थापित किया जा सकता है।

आप बता सकते हैं कि जब आप पाइथन दुभाषिया को कमांड लाइन से निष्पादित करते हैं तो हेडर को देखकर आपके संस्करण को किस संस्करण के साथ बनाया गया था। उदा।: Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 का अर्थ है कि यह वीएस 2008 सी ++ के साथ बनाया गया था। आप पाइथन को स्रोत से स्वयं बना सकते हैं, लेकिन यह भी एक कठिन कार्य है। आम तौर पर संकलक रनटाइम को मिश्रित करने की अनुशंसा नहीं की जाती है, हालांकि व्यवहार में आप पाते हैं कि वे अभी भी काम करते हैं।

आप अपने दिल GNU GCC के प्रयोग पर स्थापित किया है, तो आप का उपयोग करने के mingw-w64 क्योंकि MinGW केवल देशी x86 अनुप्रयोगों के लिए, नहीं AMD64/x86-64 है होगा। तुम्हें पता है,

  • remove the -mno-cygwin bug from distutils.cygwinccompiler.Mingw32ccompiler और
  • export a library definitions file using either pexports.exe from msys or gendef.exe from msys2 and make a static library libpython27.a using dlltool.exe (msys/msys2) (but the newest releases of Official Python for Windows already have this file in the Python27\lib folder, thanks!)

    हालांकि अंत में आप अभी भी क्रम कि अजगर, साथ msvcr90.dll बनाया गया था के खिलाफ से जोड़ने के लिए है, तो आप Visual C++ 2008 redistributable की आवश्यकता होगी की आवश्यकता होगी। नोट: mingw-w64 से विंडोज जीसीसी msvcrt.dll which is not the same as msvcr90.dll or later का उपयोग करता है।

    आप Microsoft Visual C++ 2008 Express SP1 उपयोग कर सकते हैं आप मुक्त करने के लिए यह करना चाहते हैं, लेकिन आप क्योंकि एक्सप्रेस संस्करण नहीं 64 compilers है Windows SDK 7 for .NET Frameworks 3.5 SP1 जोड़ने की आवश्यकता होगी। वीएस 2008 एक्सप्रेस & एसडीके 7 के साथ x64 सी ++ एक्सटेंशन इंस्टॉल करने की प्रक्रिया cython site for windows x64 extensions पर बहुत समान है। नोट: एमएस विजुअल स्टूडियो 2008 एक्सप्रेस अब उपलब्ध या समर्थित नहीं है।

    एफवाईआई: आपको माइक्रोसॉफ्ट कंपाइलर्स का उपयोग करने के लिए विजुअल स्टूडियो की आवश्यकता नहीं है। वे उचित एसडीके पैकेज के साथ मुफ्त में उपलब्ध हैं। CL.EXE संकलक निष्पादन योग्य है, लेकिन आपको ऑटोटूल या कुछ अन्य टूल जैसे कि सीएमकेई द्वारा सामान्य रूप से कॉन्फ़िगर किए गए प्लेटफ़ॉर्म विकल्प सेट करना होगा।सीएमकेई एमएसवीसी के साथ अच्छी तरह से खेलता है, लेकिन ऑटोोटूल AFAIK एमएसवीसी के साथ काम नहीं करता है और कुछ पॉज़िक्स पर्यावरण और उपयोगिता की आवश्यकता होगी जो विंडोज़ पर MSYS में उपलब्ध हैं।

    कई अजगर संकुल कि distutils या setuptools उपयोग करते हैं, वे दिशाओं कि संदर्भ दस्तावेज़ के माध्यम से विभिन्न स्थानों में पोस्ट कर रहे हैं और विकी का पालन करते हुए विंडोज एसडीके 7 का उपयोग करके एक्सटेंशन संकलन कर सकते हैं के लिए: प्रारंभ मेनू से

    1. सभी कार्यक्रम तो माइक्रोसॉफ्ट विंडोज एसडीके v7.0 चयन और Windows एसडीके के लिए अनुकूलित एक कमांड विंडो खोलने के लिए अध्यक्ष एवं प्रबंध निदेशक शैल शुरू।

      %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" 
      

      नोट::

    2. चरण # 1 प्रारंभ मेनू से या एक कमांड प्रॉम्प्ट (उर्फ C:\Windows\System32\cmd.exe) से भागो बॉक्स में निम्न लिखकर के बराबर है झंडे /E:ON, जो आदेश एक्सटेंशन सक्षम करता है, और /V:ON, जो देरी परिवर्तनीय विस्तार को सक्षम बनाता है, दोनों को SetEnv.cmd फ़ंक्शन के लिए आवश्यक है, या आपको एक संदेश मिलेगा कि x64 कंपाइलर स्थापित नहीं हैं, & c।

    3. फिर setenv /Release /x64 टाइप करें जो विशेष रूप से विंडोज 7 x64 रिलीज (बनाम डिबग या x86 जो डिफ़ॉल्ट हैं) के लिए एसडीके पर्यावरण चर सेट करेगा।

    4. प्रकार set DISTUTILS_USE_SDK=1 हिट वापसी और उसके बाद set MSSdk=1 टाइप करें और है कि आप एसडीके का उपयोग कर रहे हैं, और उस एसडीके वातावरण चर के सभी का निर्धारण करेगा distutils.msvccompiler बताने के लिए वापस जाएँ।
    5. अब अपनी पसंद के स्थापना विधि का उपयोग करें:
      • pip install pyyaml ntlk जो सिफारिश की तरह, see ntlk है, लेकिन आप setuptools और pip स्थापित होना चाहिए।
      • python setup.py install प्रत्येक डाउनलोड, निकाले गए टैरबॉल
      • easy_install pyyaml ntlk जो पुराना तरीका है और अंडे स्थापित करने का एकमात्र तरीका है।

    [1] Building C and C++ Extensions on Windows
    [2] distutils.msvccompiler — Microsoft Compiler
    [3] Python Dev Guide: Getting Started: Windows
    [4] What version of visual studio is this python compiled with

  • +2

    यदि आप पायथन के लिए एक्सटेंशन बनाना चाहते हैं 2.7- 3.2, http://aka.ms/vcpython27 पर संकलक पैकेज और setuptools 6.0 या बाद में अब सबसे आसान विकल्प हैं। – Zooba

    +0

    टिप्पणी करने के लिए खेद है और फिर अपना जवाब पोस्ट करें :(अपने उत्तर को अपडेट करने के लिए स्वतंत्र महसूस करें - मुझे वोट प्राप्त करने की तुलना में फिक्स के बारे में सुनने वाले लोगों के बारे में अधिक परवाह है। – Zooba

    0

    स्पष्ट रूप से ऐसा करने के कई तरीके हैं।

    1. MinGW
    2. निर्माण अजगर 2.7 का उपयोग कर वी.एस. 2008 एक्सप्रेस का उपयोग करते हुए निर्माण।
    3. मुझे यकीन है कि जो के बारे में संस्करण 3.2 के निर्माण के लिए अच्छा है नहीं कर रहा हूँ लेकिन वी.एस. 2010
    4. आप अपने वांछित वी.एस. का उपयोग कर स्रोत से अजगर 64 संकलन कर सकते हैं यह हो सकता है, लेकिन u'll अन्य पूर्व बनाया संकुल के साथ competability मुद्दे हैं ।
    11

    अन्य उत्तर के बाद से, माइक्रोसॉफ्ट इमारत एक्सटेंशन के लिए एक संकलक पैकेज विशेष रूप से जारी किया है पायथन 2.7 के लिए (और पायथन का कोई भी संस्करण जो वीएस 2008/वीसी 9 का उपयोग करता है)। इसका इस्तेमाल करने के तरीके:

    1. http://aka.ms/vcpython27, डाउनलोड के लिए जाओ और पैकेज स्थापित (यह काफी छोटा है और प्रशासक के अधिकारों की आवश्यकता नहीं है) से 6

    2. अद्यतन setuptools।0 या बाद में (pip install -U setuptools)

    3. अपने पैकेज (pip install <whatever>)

    नवीनतम setuptools संस्करण है और इस संकलक पैक के संयोजन यह वास्तव में आसान यह करने के लिए करना चाहिए स्थापित करें।

    +0

    पायथन 2.7 के लिए नए [माइक्रोसॉफ्ट विजुअल सी ++ कंपाइलर्स के साथ इसे अपडेट करने के लिए धन्यवाद। ] (http://www.microsoft.com/en-us/download/details.aspx?id=44266)! मैंने ब्लॉग को इस अंक को पहले ही अपडेट कर दिया है, लेकिन मैंने अभी तक यह जवाब अपडेट नहीं किया है। –

    0

    यह मेरे लिए सबसे अच्छा काम किया:

    1. स्थापित Visual Studio Express 2008
    2. से http://www.microsoft.com/en-us/download/details.aspx?id=3138
    3. जाओ स्थापित Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin करने और Visual Studio 2008 x64 Win64 Command Prompt
    4. कि खोल में खोलते हैं, तो pip install <package>

    चलाने आपको नहीं होना चाहिए इस तरह से किए जाने पर क्लाइंट सिस्टम पर किसी भी पुनर्वितरण योग्य पैकेज को स्थापित करने के लिए।

    0

    Windows 10, अजगर 2.7.11 के लिए, Cygwin 2.5.2 और x86_64-W64-mingw32-जीसीसी 4.9.2 या 5.4.0 (लेकिन टिप्पणी नीचे 1 के तहत देखें), कहीं और से एक साथ टिप्पणियों खींच,

    1. संपादित distutils/cygwinccompiler, और class Mingw32CCompiler

      • में: यहाँ मैं संकलित करने के लिए मेरी अजगर विस्तार, लिंक के लिए करते हैं, और msvcrt.dll और msvcr90.dll के बीच एक रेस स्थिति को हरा था क्या

        बदलें

        if self.gcc_version < '4' or is_cygwingcc(): 
            no_cygwin = ' -nostdlib -lgcc' 
        
        जीसीसी 4.9.2 के लिए

        के साथ पुराने -mno-cygwin ठीक - टिप्पणी 5.4.0 के लिए, कोई 'अगर', बस

        no_cygwin = '' 
        
      • जगह पर सही संकलक जाओ :

         self.set_executables(compiler='x86_64-w64-mingw32-gcc%s -O -Wall' % no_cygwin, 
               compiler_so='x86_64-w64-mingw32-gcc%s -mdll -O -Wall' % no_cygwin, 
               compiler_cxx='x86_64-w64-mingw32-g++%s -O -Wall' % no_cygwin, 
               linker_exe='x86_64-w64-mingw32-gcc%s' % no_cygwin, 
               linker_so='x86_64-w64-mingw32-%s%s %s %s' 
        
      • x86_64-W64-mingw32-जीसीसी 5.4.0 के लिए टिप्पणी, यह बेहतर काम करने के लिए लगता है msvcr90 बिना, इसलिए get_msvcr सशर्त करने के लिए फोन करना:

         if self.gcc_version < '5': 
              self.dll_libraries = get_msvcr() 
        
    2. एक सेटअप का उपयोग करें।निम्नलिखित

      libdirs=['C:\\Python27\\libs',...] 
      macros=[('MS_WIN64','1'),...] 
      platform="WIN32" 
      
    3. पैच मेरे स्रोत फ़ाइल हेडर से एक के साथ py

      #ifdef MS_WIN64 
      #define strdup _strdup 
      #endif 
      
    4. अंत में

      ,

      /c/Python27/python [editted setup].py -v build --compiler=mingw32 
      /c/Python27/python [editted setup].py -v install 
      

    ऊपर से कुछ काफी में नहीं हो सकता है शामिल करने के लिए इष्टतम स्थान, लेकिन यह मेरा विस्तार काम कर रहा है ...

    संबंधित मुद्दे