2013-03-01 13 views
9

İstek kütüphanesini kullanan python 3.3 uygulamasında bir uygulama yapıyorum. SSL bağlantısı olan bir URL almaya çalışırken, doğrulamak için doğrulamak istiyorum = true. Bu, python komut dosyalarını çalıştırırken mükemmel çalışır.Kitaplık istekleri: cx_freeze öğesinden sonra eksik dosya

Aynı komut dosyalarını donduğumda çöker. Bir şey özlüyor ve donmuş uygulamada onu nasıl entegre edeceğimi gerçekten anlayamıyorum.

aşağıdaki hatayı alıyorum (ayrıca diğer hataları tetikler, ama burada onları sonrası yok):

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 eksik gibi görünüyor. Istek kitaplığı içinde cacert.pem adlı bir dosya var, ancak bu eksik dosya olup olmadığını ve son donmuş paketime entegre görünmüyor gibi onu nasıl içe aktarılacağını bilmiyorum.

+0

Ayrı dosyalar gerektiren modüller (burada anahtar dosyası gibi) donuk olduğunda sorun yaşarlar. İstek kodunu düzenlemeniz gerekebilir. –

+0

Ödenen bir olasılıkla işe yarayacak bir imkandır, ancak dosya modül klasöründen pakete aktarılırsa daha iyi olur. Bu özel dosyayı donma işlemi sırasında içe aktarmaya zorlamak da mümkün mü? Kurulum işleminde kullanılabilecek içe aktarma özellikleri vardır, ancak resmi belgeler bu konuda çok net olmadığı için bunları tam olarak nasıl kullanacağımı bilmiyorum. – Ecno92

cevap

9

İstekler kaynağına bakıldığında,dosyasının yolunu verify=True yerine verify=path olarak iletebilirsiniz. Bu yüzden çalışması için istekleri değiştirmeniz gerekmez.

Bir dosyanın yolunu, cx_Freeze seçeneklerinin (docs) include-files parametresine dahil etmek üzere iletebilirsiniz. Sen isteklerden yolunu bulabilirsiniz, bu nedenle böyle bir şey bunu dondurmak için setup.py Kullanmak içinde çalışması gerekir: bahsedilen

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

#... 
+5

Çok teşekkür ederim. Bu küçük bir değişiklikten sonra çözüm oldu. Tanımladığınız yöntem, CX_Freeze bunun gibi mutlak bir yolu kabul etmeyeceği için mümkün değildir. Anahtar, ilk yarıda ve ikinci yarıda hedef yolunda mutlak yol verdiğiniz bir tuple kullanmaktır. Bu şekilde doğrulamayı doğru olarak ayarlayarak çalıştı. Bunun gibi: "include_files": [(requests.certs.where(), 'cacert.pem')] – Ecno92

+0

Teşekkürler.Cevabı güncelledim, böylece buna rastlayan herkes için net. –

4

Thomas K olarak, doğrulamayı etkinleştirmek eğer bir CA sertifikaları dosya dahil etmek gerekir. Ancak, en azından benim için requests'un [INSTALL PATH]\library.zip\cacert.pem'u arayacağını ve bunun başarısız olacağını buldum.

ben tarif

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

#... 

olarak cacert.pem kopyalayarak onu çözmüş ve bir istek gerçekleştirirken doğrudan yolunu belirtilen:

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

Evet ve "INSTALL PATH", cx_freeze'in [veri dosyalarını bulmak için önerilen yöntem] tarafından belirlenebilir (https://cx-freeze.readthedocs.org/en/latest/faq.html#using-data-files) – toefftoefftoeff

İlgili konular