Pertanyaan cx-freeze, runpy dan multiprocessing - beberapa jalur menuju kegagalan


Ini sedikit rumit, dan mungkin butuh waktu Anda.

Masalah dasarnya adalah, bahwa pada linux (Ubuntu dalam kasus pengujian saya) versi program yang dibekukan cx (Omnitool) tidak dapat membuat subprocess. Ia bekerja pada Windows 7, namun. Atau saat menjalankan langsung dari kode sumber. Sayangnya itu tidak sesederhana melupakan freeze_support.

Masalah

Perilaku default memulai subproses, adalah bahwa X Server crash. Khususnya seperti ini:

XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
      after 23 requests (23 known processed) with 0 events remaining.
[xcb]Unknown sequence number while processing queue 
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called 
[xcb] Aborting, sorry about that. 
Omnitool: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed. 
Aborted (core dumped)

Tidak ada traceback python. Saya mencoba menelepon secara manual XInitThreads dengan ctypes, ia mengembalikan 0 untuk berhasil diatur, tetapi crash terlepas. Sesaat sebelum kecelakaan, UI pygame tidak berfungsi, jadi saya berharap ada sesuatu yang salah.

Sekarang, pengaturan multiprocessing.set_start_method() mengubah masalah sekitar: "Forkserver" memberi saya traceback yang cantik ini, yang tidak memberi tahu saya apa pun:

Contoh Pastebin

Mengaturnya untuk bertelur, sebaliknya, membuatnya tidak melakukan apa-apa. Proses dimulai, dan dilalui __main__, karena saya dapat membuktikan dengan cetakan, tetapi tidak pernah memasuki fungsi target untuk subproses tersebut.

Mencoba dirimu sendiri

Pastikan Anda memiliki Ubuntu atau Linux yang sebanding dengan python 3.4. Kemudian untuk mendapatkan semua dependensi:

Unduh omnitool sebagai zip atau klon dari git: https://github.com/Berserker66/omnitool requirements.txt dalam kode berikut adalah dari Omnitool.

sudo apt-get update -qq
sudo apt-get install --fix-missing mercurial subversion python3-dev python3-numpy libav-tools libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev libsdl1.2-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev python3-pip
pip3 install -r requirements.txt
pip3 install cx_Freeze

Untuk membekukan, jalankan omnisetup.py dengan buildargumen.

Saya juga mencoba pembekuan dengan pyinstallers python 3 fork, yang gagal sangat mirip. File spesifikasi tidak dilacak.


32
2017-08-11 13:29


asal


Jawaban:


Saya menggunakan cx_freeze untuk sebuah proyek di tempat kerja. Saya tidak yakin apakah ini masalah Anda ... tetapi saya menggunakan distribusi Anaconda, dan cx_freeze tidak mengumpulkan berkas .dll yang dibutuhkan untuk proyek saya.

Solusinya adalah:

  1. Instal versi pesawat Python
  2. membuat lingkungan dengan paket yang saya butuhkan untuk proyek itu
  3. Jalankan cx_freeze.

Ajaib, semua masalah pergi dan semuanya dikompilasi seperti yang seharusnya juga.


1
2017-09-16 02:44



Saya tahu bahwa mungkin ini bukan yang ingin Anda dengar, tetapi kenyataannya adalah Anda tidak akan pernah bisa berhasil dengan pendekatan ini dan inilah alasannya:

  • Linux tidak memiliki paket binari paket Python, yang berarti bahwa numpy yang dikompilasi pada satu distro mungkin tidak akan bekerja pada yang lain. Itu bahkan dapat terjadi dengan distribusi dan versi yang sama, hanya karena satu perpustakaan sistem menerima pembaruan.
  • manylinux1 seharusnya menyelesaikan ini tetapi sangat sulit untuk membuat paket untuk itu dan hanya sedikit yang mulai menggunakannya.
  • proyek cx-freeze memiliki rilis terbaru pada bulan Desember 2014, yang pada skala waktu Python menempatkannya sebagai proyek yang terbengkalai.

0
2018-05-29 16:21



Masalah yang Anda hadapi mungkin disebabkan oleh kurangnya ketergantungan. cx_Freeze memiliki beberapa dependensi. Untuk mendistribusikan pekerjaan Anda di python, banyak paket ringan yang tersedia. Kamu dapat memakai:-

  1. Pyinstaller: dapat diinstal oleh

    pip instal pirinstaller pyinstaller benar-benar baik untuk membuat executable dengan ukuran yang lebih kecil

  2. Py2exe


0
2017-11-24 14:55