Python programınızı platformlararası olacak şekilde derlemek

Python yorumlayıcısını nasıl yollayabiliriz? Yani 250 MB’lık Python klasörünü yollamaktan mı bahsediyorsunuz?

Ben onu windows’ta 30 MB diye hatırlıyorum, lib/site-packages 'i saymayın.

Python klasör olarak taşımak yerine neden uygulamaya dahil etmiyorsunuz?

https://docs.python.org/3/extending/embedding.html

Acaba nasıl yapılacağı konusunda yardımcı olabilir misiniz?

Bahsettiğim blender 80 MB’lık.

Daha önce böyle bir çalışma yapmadım. Ancak dediğim gibi eğer C ile program geliştirecekseniz ve Python’u kullanmak istiyorsanız bunu yapmanın en sağlıklı yolu budur diye düşünüyorum.

Windows’da Python’i statik derlemek pek kolay degilmis. DLL’i EXE’yle beraber yollayin?

Ayni sorun; yine statik runtime gerekecek.

Dll bu sorunu çözüyor mu? Yani bağımlılık olmadan sadece dll dosyası ile?

Sorun zaten DLL’in bulunamamasi degil mi? Yukaridaki “python37.dll eksik” hata mesajina istinaden konusuyorum.

DLL dosyasina bagimlilik ile.

1 Beğeni

Şunu sormak istiyorum. Dll ile beraber baska bir sey dağıtmak gerekmiyor mu? Mesela standart kütüphaneler. Bu konuyla ilgili örnek içeren link paylaşabilir misiniz acaba?

Ben genel executable calistirmadan bahsediyorum. Gereken kutuphaneler import section’inda yazar. DLL’lerin de import section’lari vardir.

Spesifik olarak Python’in DLL’i nasil calisiyor, ne istiyor bilmiyorum. Yukarida alinan hata Windows hatasi, cozumu DLL’i EXE’nin yanina veya PATH’e koymak.


Link olarak; statik kutuphane nereden bulunur ona baktim, 2-3 cevap “Windows’da cok zor”, bir tanesi ise “su oyun motorumda submodule olarak yer alan bir proje Python’i Windows’ta compile ediyor, onu kullanin isterseniz” gibi bir sey diyordu, cok kurcalamadim.

Geriye kalan bilgiler senin yolladigin linkte var zaten. (Compile/link asamalari nasil calisiyor, executable loader ne yapiyor yan bilgileriyle.)

Tek DLL’in yetmeyecegi bilgisi de ordaymis :\

It is not necessarily trivial to find the right flags to pass to your compiler (and linker) in order to embed the Python interpreter into your application, particularly because Python needs to load library modules implemented as C dynamic extensions ( .so files) linked against it.

Bir suru standart kutuphane modulleri dinamik formatta:

/usr/lib/python3.6/lib-dynload/_curses.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/resource.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_asyncio.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_decimal.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_opcode.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_testbuffer.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/nis.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/termios.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_ssl.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_codecs_hk.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_testmultiphase.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/audioop.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_json.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_codecs_kr.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_codecs_tw.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/xxlimited.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/parser.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_multibytecodec.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_multiprocessing.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_testcapi.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_gdbm.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_dbm.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_curses_panel.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_codecs_iso2022.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_ctypes_test.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_crypt.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_codecs_cn.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_lsprof.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_csv.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_codecs_jp.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_testimportmultiple.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_tkinter.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/ossaudiodev.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/mmap.cpython-36m-x86_64-linux-gnu.so
/usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so
1 Beğeni

Modül yükleyince biliyorsunuz Python klasörünün boyutu da artıyor. En son baktığımda 250 MB olmuştu.

C ile Python’la ilgilendiğim kadar ilgilenmiş olsaydım belki ne yapacağımı bilirdim. Ama şimdi birşey yapmaya geçmeden önce, biraz bilgilenmem gerekiyor.

2 Beğeni

dll’yi exe’nin yanına koyduğumda daha farklı bir hata veriyor.

Fatal Python error: Py_Initialize: unable to load the file system codec ModuleNotFoundError: No module named ‘encodings’

Hmm. şu şekilde çalıştı. Python3’ü sistemden kaldırmadan önce yedeğini aldım. Sistemden Python3’ü kaldırdıktan sonra onun yedeğini Python3’ün kaldırılmadan önceki yerine kopyaladım.

test.exe’yi de bu yedek Python klasörünün içine attım. Sonra test.exe’yi çalıştırmayı denedim, dosya çalıştı. test.exe farklı bir klasörde olursa yine çalışmıyor.

Bu bahsedilen dll nerede?

C:\Python37 dizininin içinde.

Bunun sebebi yukarida yaptigim alinti:

Turkcesi: Python.dll, diger modulleri de DLL formatinda bekliyor.

2 Beğeni