2013-03-01 9 views
9

के बाद फ़ाइल गायब है मैं पाइथन 3.3 में एक एप्लिकेशन बना रहा हूं जो अनुरोध पुस्तकालय का उपयोग करता है। जब मैं SSL कनेक्शन के साथ एक यूआरएल प्राप्त करने का प्रयास करता हूं, तो मैं इसे सत्यापित = सत्य के साथ सत्यापित करना चाहता हूं। यह मेरी पायथन स्क्रिप्ट चलाने पर पूरी तरह से काम करता है।अनुरोध लाइब्रेरी: cx_freeze

जब मैं वही स्क्रिप्ट जमा करता हूं तो यह क्रैश हो जाता है। यह कुछ याद करता है और मैं वास्तव में यह नहीं समझ सकता कि इसे अपने जमे हुए एप्लिकेशन में कैसे एकीकृत किया जाए।

मैं निम्नलिखित त्रुटि मिलती है (जो भी अन्य त्रुटियों से चलाता है, लेकिन मैं उन्हें यहाँ पोस्ट न करें):

Traceback (most recent call last): 
File "C:\Python33-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 422, in urlopen 
body=body, headers=headers) 
File "C:\Python33-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 274, in _make_request 
conn.request(method, url, **httplib_request_kw) 
File "C:\Python33-32\lib\http\client.py", line 1049, in request 
self._send_request(method, url, body, headers) 
File "C:\Python33-32\lib\http\client.py", line 1087, in _send_request 
self.endheaders(body) 
File "C:\Python33-32\lib\http\client.py", line 1045, in endheaders 
self._send_output(message_body) 
File "C:\Python33-32\lib\http\client.py", line 890, in _send_output 
self.send(msg) 
File "C:\Python33-32\lib\http\client.py", line 828, in send 
self.connect() 
File "C:\Python33-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 105, in connect 
ssl_version=self.ssl_version) 
File "C:\Python33-32\lib\site-packages\requests\packages\urllib3\util.py", line 281, in ssl_wrap_socket 
context.load_verify_locations(ca_certs) 
FileNotFoundError: [Errno 2] No such file or directory 

ऐसा नहीं है कि ca_certs याद आ रही है लगता है। अनुरोध पुस्तकालय में cacert.pem नामक एक फ़ाइल है, लेकिन मुझे नहीं पता कि यह गुम फ़ाइल है और इसे कैसे आयात करें क्योंकि यह मेरे अंतिम जमे हुए पैकेज में एकीकृत नहीं है।

+0

मॉड्यूल जिन्हें अलग फाइलों की आवश्यकता होती है (यहां की मुख्य फ़ाइल) को जमे हुए होने पर परेशानी होती है। आपको अनुरोध कोड संपादित करने की आवश्यकता हो सकती है। –

+0

ऑफकोर्स जो संभावित रूप से काम करेगा, लेकिन मॉड्यूल फ़ोल्डर से फ़ाइल में फ़ाइल आयात होने पर यह अच्छा होगा। क्या फ्रीज प्रक्रिया के दौरान इस विशिष्ट फ़ाइल को आयात करने के लिए मजबूर करना भी संभव है? सेटअप प्रक्रिया में आयात सुविधाएं उपलब्ध हैं, लेकिन मुझे नहीं पता कि उनका उपयोग कैसे किया जाए क्योंकि आधिकारिक दस्तावेज इस बारे में बहुत स्पष्ट नहीं है। – Ecno92

उत्तर

9

अनुरोध स्रोत को देखते हुए, ऐसा लगता है कि आप cacert.pem फ़ाइल के बजाय verify=path के रूप में पथ पारित कर सकते हैं। इसलिए आपको काम करने के लिए अनुरोधों को संशोधित करने की आवश्यकता नहीं है।

आप cx_Freeze विकल्पों (docs) के include-files पैरामीटर में शामिल करने के लिए फ़ाइल के पथ को पारित कर सकते हैं। आप अनुरोध से पथ पा सकते हैं, तो कुछ इस तरह setup.py आप उपयोग में काम करना चाहिए यह फ्रीज करने के:

import requests.certs 
build_exe_options = {"include_files":[(requests.certs.where(),'cacert.pem')]} 

#... 
+5

बहुत बहुत धन्यवाद। यह एक छोटे बदलाव के बाद समाधान था। आपके द्वारा वर्णित विधि संभव नहीं है क्योंकि CX_Freeze इस तरह एक पूर्ण पथ स्वीकार नहीं करेगा। कुंजी एक टुपल का उपयोग करना है जहां आप पहली छमाही में और दूसरे भाग में गंतव्य पथ को पूर्ण पथ देते हैं। इस तरह यह सत्य को सत्यापित करने के द्वारा काम किया। इस तरह: "include_files": [(request.certs.where(), 'cacert.pem')] – Ecno92

+0

धन्यवाद।मैंने जवाब अपडेट कर दिया है, इसलिए यह किसी और के लिए स्पष्ट है जो इस पर आता है। –

4

Thomas K के रूप में कहा, तुम एक CA प्रमाणपत्र फाइल अगर आप सत्यापन सक्षम शामिल करने के लिए की जरूरत है।

हालांकि, मैंने पाया कि कम से कम मेरे लिए, requests[INSTALL PATH]\library.zip\cacert.pem की तलाश करेगा जो असफल हो जाएगा।

मैं के रूप में वर्णित

import requests.certs 
build_exe_options = {"include_files":[(requests.certs.where(),'cacert.pem')]} 

#... 

cacert.pem को कॉपी करके इसे हल और सीधे अपने पथ निर्दिष्ट किया है जब एक अनुरोध प्रदर्शन:

requests.get(..., verify = '[INSTALL PATH]\cacert.pem') 
+0

हां, और 'स्थापित पाथ' को cx_freeze के द्वारा निर्धारित किया जा सकता है [डेटा फ़ाइलों को खोजने के लिए सुझाई गई विधि] (https://cx-freeze.readthedocs.org/en/latest/faq.html#using-data-files) – toefftoefftoeff

3

तुम भी पर्यावरण चर "REQUESTS_CA_BUNDLE" का उपयोग कर सकते है (जैसा कि कहा http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification)

यह आपके सभी अनुरोधों को सही करने के मुकाबले बहुत आसान है:

os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(), "cacert.pem") 
संबंधित मुद्दे