2013-09-05 5 views
7

नहीं है मैंने हाल ही में एक 64-बिट विंडोज 7 मशीन के लिए अपने प्रोग्रामिंग चलती किया गया है और प्रासंगिक पुस्तकालयों स्थापित किया गया है। हालांकि मुझे Scipy - Sparse लाइब्रेरी के साथ समस्याएं हैं।SciPy - विरल लाइब्रेरी ImportError: DLL लोड विफल:% 1 कोई मान्य Win32 आवेदन

मैंने scipy0.12.0-amd64-py27 स्थापित किया है (जैसा कि मेरा पायथन 2.7 इंस्टॉल 64-बिट रिलीज है) विंडोज़ के लिए रिलीज है और सीधे scipy लाइब्रेरी का उपयोग करते समय मुझे कोई त्रुटि नहीं आती है। जैसे

import scipy 
print scipy.version 

रिटर्न

<module 'scipy.version' from 'C:\Python27\lib\site-packages\scipy\version.pyc'> 

जैसी उम्मीद थी।

लेकिन जब इस प्रकार आयात विरल पुस्तकालय की कोशिश कर रहा:

from scipy import sparse 

मैं:

ImportError: DLL load failed: %1 is not a valid Win32 application. 

दुर्भाग्य से मेरी जानकारी सीमित है और मैं एक प्रासंगिक समाधान खोजने के लिए प्रतीत नहीं कर सकते हैं। निकटतम यह था कि मैंने गलत पुस्तकालय स्थापित किया था, हालांकि मैं नहीं देख सकता कि यह क्यों होगा यदि रूट scipy लाइब्रेरी सही ढंग से काम कर रहा था।

किसी को भी इस के लिए एक समाधान के बारे में पता है? या विंडोज़ के लिए सीधे पाइथन पैकेजों में से एक का उपयोग करना बेहतर होगा?

धन्यवाद

संपादित करें:

यहाँ त्रुटि से ट्रैस है:

Traceback (most recent call last): 
    File "C:\Users\Piers\Documents\Physics\PhD\Code\Far Time Crank-Nicholson\FarTimeCrankNicholson.py", line 16, in <module> 
    from scipy import sparse 
    File "C:\Python27\lib\site-packages\scipy\sparse\__init__.py", line 182, in <module> 
    from .csr import * 
    File "C:\Python27\lib\site-packages\scipy\sparse\csr.py", line 15, in <module> 
    from .sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \ 
    File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\__init__.py", line 5, in <module> 
    from .csr import * 
    File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\csr.py", line 26, in <module> 
    _csr = swig_import_helper() 
    File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\csr.py", line 22, in swig_import_helper 
    _mod = imp.load_module('_csr', fp, pathname, description) 
ImportError: DLL load failed: %1 is not a valid Win32 application. 
+1

सामान्य समस्या यह है कि 'scipy.sparse' पर निर्भर करता है (या तो पाइथन 'आयात' या सी डीएलएल के रूप में) टूटा हुआ/गलत है (उदाहरण के लिए, 64-बिट एक के बजाय 32-बिट .pyd)। दुर्भाग्यवश, पायथन 2.7 के आयात तर्क में एक सीमा के कारण, यह बताने में बहुत मुश्किल है कि (पहले मामले में, ट्रेसबैक आपको बता सकता है-और आपको हमेशा एक पूर्ण ट्रेसबैक पोस्ट करना चाहिए-लेकिन दूसरे मामले में, कोई और जानकारी नहीं थी)। – abarnert

+0

सी ++ पुनर्वितरण स्थापित करने का प्रयास किया, दुख की बात है कि काम नहीं किया। हालांकि सुझाव के लिए चीयर्स! –

+0

क्या वह 'scipy0.12 है।0-amd64-py27' [क्रिस्टोफ गोल्के की साइट] से एक (http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy), या कुछ अलग है? – abarnert

उत्तर

5

अंत में, इसका मतलब है कि scipy.sparse ही है, या कुछ और यह आयात करता है, या तो है, या कम से पर निर्भर करता है लोड समय, एक डीएलएल या .pyd फ़ाइल जो टूटी हुई है या गलत-आर्किटेक्चर के लिए है।

तो, इस पर नज़र रखने के लिए दो चरण हैं।


सबसे पहले, आपको यह पता लगाने की आवश्यकता है कि कौन सी वास्तविक .pyd/.DLL फ़ाइल इस अपवाद को उठा रही है। दुर्भाग्य से, पायथन 2.7 आपको यह जानकारी सीधे नहीं देगा।

आप ImportError से ट्रेसबैक देखकर इसे समझने में सक्षम हो सकते हैं- यह श्रृंखला में सबसे कम मॉड्यूल द्वारा import एड होना चाहिए। (आप ट्रैस बैक समझ में नहीं आता है, तो उसे अपने जवाब में पेस्ट, और उम्मीद है कि किसी और आप बता सकते हैं।)

असफल कि, आप मैन्युअल बातें के माध्यम से चलने के लिए होगा। आप यह क्या है, तो एक-एक करके प्रत्येक import एक कोशिश को देखने के लिए आपकी साइट-संकुल में scipy/sparse/__init__.py या online in the repository के स्रोत पर देख सकते हैं। जब आपको लगता है कि कोई ऐसा लगता है, तो पर स्रोत कोड देखें, और इसी तरह, जब तक आप पेड़ के नीचे तक नहीं पहुंच जाते।

अब जब कि तुम ट्रैस बैक चिपकाया है, हम इस भाग से बता सकते हैं:

File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\csr.py", line 22, in swig_import_helper 
    _mod = imp.load_module('_csr', fp, pathname, description) 

... कि समस्या यह है कि scipy.sparse.csr, उर्फ ​​scipy/sparse/csr.pyscipy.sparse._csr लोड करने के लिए है, जो लगभग निश्चित रूप से नाम की एक फ़ाइल है विफल हो रहा है कुछ _csr.dll या _csr.pyd, और कहीं scipy निर्देशिका के अंदर। सटीक जहां थोड़ा जटिल हो सकता है, क्योंकि कोड imp.load_module को एक सरल import कथन का उपयोग करने के बजाय कस्टम पथनाम के साथ कॉल कर रहा है ... लेकिन इसे ढूंढना बहुत मुश्किल नहीं होना चाहिए। (आप अटक जाते हैं, तो आप कभी भी अस्थायी रूप csr.py संपादित यह load_module को पार करने से पहले पथ नाम print कर सकते हैं।)

तो, कि पुस्तकालय है कि आप जांच करने की आवश्यकता है।


अब जब कि तुम .pyd/.dll फ़ाइल वास्तव में जिम्मेदार, वहाँ दो संभावनाएं हैं।

सबसे पहले, यह अपने आप में तोड़ा जा सकता है, या गलत वास्तुकला के लिए (उदाहरण के लिए, 32-बिट के बजाय 64-बिट), आदि

यदि नहीं, अगर एक और .dll कि टूटी हुई है या के लिए है के खिलाफ लिंक होना चाहिए गलत वास्तुकला।

उपकरण Dependency Walker उपकरण आपको बता सकता है कि एक डीएलएल 32- या 64-बिट है, चाहे वह लोड करने में बहुत बुरी तरह खराब हो, आदि। और यह आपको सभी डीएलएल की एक सूची भी दे सकता है जो पुस्तकालय स्वयं निर्भर करता है, जिसे आप तब तक जांच सकते हैं जब तक आप समस्या नहीं पाते।


इस बीच, अगर आप सोच रहे हैं कि कैसे आप पहली जगह में इस स्थिति में मिल गया ...

विंडोज पर द्विआधारी अजगर पैकेज स्थापित कर रहा है आम तौर पर निर्भरता वे की जरूरत है स्थापित नहीं है, या पता लगाने वे कर रहे हैं कि गायब - विशेष रूप से गैर पायथन निर्भरता। इसलिए, जब तक आप कोड के कुछ भाग का उपयोग करने की कोशिश नहीं करते हैं, तब तक आपको समस्या दिखाई नहीं देती है, जिसके लिए उन निर्भरताओं की आवश्यकता होती है। Christoph Gohkle's इन समस्याओं को कम करने की कोशिश कर रहे एक महान काम करता है (आमतौर पर केवल उचित एमएसवीसी पुनर्वितरण योग्य, और numpy के Numpy-MKL संस्करण को स्थापित करने की ज़रूरत है), लेकिन सीमाएं हैं।

the scipy website explains के रूप में, एनाकोंडा या एनथॉट जैसे "वैज्ञानिक पायथन वितरण" को डाउनलोड करना बहुत आसान है।

या, वैकल्पिक रूप से, यदि आप स्रोत से स्थापित करते हैं- उदाहरण के लिए, pip के माध्यम से - आपको सभी आवश्यक शर्तें ठीक से स्थापित करनी होंगी, या इंस्टॉलेशन जल्दी विफल हो जाएगा और आपको बताएगा कि क्या गलत है। (कभी-कभी यह थोड़ा सा गूढ़ है-उदाहरण के लिए, यदि आप gcc टूलचेन का उपयोग कर रहे हैं लेकिन gfortran इंस्टॉल नहीं किया है, तो त्रुटि संदेश केवल आपको config.f संकलित करने के बारे में कुछ नहीं बताता है ... लेकिन कम से कम यह कुछ है जिसे आप खोज सकते हैं , या एसओ पर पोस्ट करें और तत्काल उत्तर प्राप्त करें।)

+0

त्वरित उत्तर के लिए धन्यवाद। मैंने यहां ट्रेसबैक संलग्न किया है। आम तौर पर मैं ट्रेसबैक के बाद ठीक हूं, लेकिन यह मुझे फेंक दिया क्योंकि अंतिम पंक्ति आयात नहीं थी। मुझे विश्वास नहीं है कि यह .csr आयात है। हालांकि कोड में पहले कई लाइनें "आयात आईपी" कथन है, जो कोड की अपमानजनक रेखा हो सकती है। क्या आप सहमत हैं? –

+0

@PiersLillystone: यह 'आयात imp' नहीं है; यह 'imp.load_module ('_ csr', ...)' है। यह 'import _csr' के बराबर करने का एक जटिल तरीका है, लेकिन पाइथन को सामान्य रूप से ढूंढने के बजाय पथनाम निर्दिष्ट करने के लिए विभिन्न चीजों को ओवरराइड करना। – abarnert

+1

मजेदार आपको यह कहना चाहिए क्योंकि ऐसा लगता है कि यह एक पायथन 2.6.0+ सुविधा है। यदि संस्करण 2.6.0 से नीचे है तो कोड 'आयात _csr' को उत्साहित करेगा। –

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