Python scriptim exeye dönüştürüldüğünde başka bilgisayarda çalışmıyor

Basit bir .py yi exeye dönüştürünce farklı bilgisayarlarda çalışmıyor. Sadece scripti oluşturduğum bilgisayarda çalışıyor. Bu sorunu nasıl aşabilirim.

import sys, os
import time
import urllib.request
import zipfile

print ('Extract files...')
print ('Installing...')
time.sleep(1)
print('Loading...')
url = 'https://xxxxxxxx.web.app/plugin.zip'
urllib.request.urlretrieve(url, 'C:\plugin.zip')
with zipfile.ZipFile("c:\plugin.zip","r") as zip_ref:
    zip_ref.extractall("c:\plugin")
time.sleep(6)
print('Successfully!')

Bu dosya o bilgisayarda bulunuyormu peki ?

Ve hata nedir ?

1 Beğeni

evet hocam o dosyayı indirtiyorum.

Bulunamayan dosya scriptin kendisi “script.py” yani pyinstaller ile exe ye dönüştürünce tek exe oluyor ama script.py ye ihtiyaç duyuyor. Bense buna ihtiyaç duymadan py yi exeye gömmek istiyorum

Hata "failed to execute file “script-adı”

Kodun tam halini atabilir misiniz? Ayrıca resource_path fonksiyonuna ihtiyacınız yokmuş gibi görünüyor.

1 Beğeni

Tam hali bu hocam eksik bişey yok sadece down urlsini gizledim

resource_path gereksiz olabilir evet bir kaç deneme yapmıştım ondan dolayı silmemişim.

Exeyi farklı bir bilgisayarda --debug ekleyerek çalıştırdım. Hata çıktısı aşağıdadır.


Traceback (most recent call last):
  File "urllib\request.py", line 1317, in do_open
  File "http\client.py", line 1244, in request
  File "http\client.py", line 1290, in _send_request
  File "http\client.py", line 1239, in endheaders
  File "http\client.py", line 1026, in _send_output
  File "http\client.py", line 966, in send
  File "http\client.py", line 1414, in connect
  File "ssl.py", line 423, in wrap_socket
  File "ssl.py", line 870, in _create
  File "ssl.py", line 1139, in do_handshake
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "scriptim.py", line 13, in <module>
  File "urllib\request.py", line 247, in urlretrieve
  File "urllib\request.py", line 222, in urlopen
  File "urllib\request.py", line 525, in open
  File "urllib\request.py", line 543, in _open
  File "urllib\request.py", line 503, in _call_chain
  File "urllib\request.py", line 1360, in https_open
  File "urllib\request.py", line 1319, in do_open
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)>
[544] Failed to execute script Scriptim

Merhaba,

Aşağıdaki Python kodunu bir dosyaya yazın ve daha sonra pyinstaller ile exe’ye dönüştürmeye çalışın.

Kod:

import io
import ssl
import sys
import zipfile
import traceback
import urllib.request


def download(url):
    print("Downloading...")
    data = urllib.request.urlopen(
        url=url,
        context=ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    ).read()
    output = io.BytesIO()
    output.write(data)
    print("Extracting...")
    with zipfile.ZipFile(output, "r") as f:
        f.extractall("./")
    print("Completed!")
        
        
def main():
    while True:
        try:
            download(url=input("URL: "))
        except:
            traceback.print_exc(file=sys.stdout)
        
        
if __name__ == "__main__":
    main()

PyInstaller:

pyinstaller --onefile dosya_ismi.py
1 Beğeni

Öncelikle çok teşekkürler @dildeolupbiten hocam.

Verdiğiniz kodları sorunsuz exeye dönüştürebildim ve başka bir bilgisayarda çalıştırabildim.

Kodda console penceresi açılıp benden download url si soruyordu. url değişkenine sabit linkimi yazdım ve alt kısmı düzenledim.

download(url=url)

Daha sonra baktım ki kodlarım durmaksızın sürekli download edip zipten çıkarmaya başladı. Bunun içinde “while True:” ifadesini kaldırdım.

ve son olarak aşağıdaki kısımda zipin nereye açılacağını belirttim.

f.extractall("c:/klasorum")

Not: Daha önceki kodlarım Visual studio 2019 pro ile yazılmıştı. @dildeolupbiten 'in verdiği kodlarıysa sublime text ile hallettim. Visual’ede gerek kalmadı. Şimdi exem diğer bilgisayarlarda herhangi bir şeye bağımlı olmadan çalışıyor.

Tekrar teşekkürler.