Я пытаюсь использовать CX_Freeze приложение для платформы Linux. Установщик Windows MSI работает отлично, но контр-часть Linux не работает так, как я ее хочу.Замораживание общих объектов cx_freeze в Linux
При сборке пакета он отлично работает на исходной системе, но при портировании в другую систему (хотя и в той же архитектуре) он генерирует segfault. Первое, что я сделал, это проверить библиотеки, и есть некоторые огромные различия версий с libc, pthread и libdl. Поэтому я решил включить их в сборке, например, так:
if windows_build:
build_exe_options['packages'].append("win32net")
build_exe_options['packages'].append("win32security")
build_exe_options['packages'].append("win32con")
pywintypes_dll = 'pywintypes{0}{1}.dll'.format(*sys.version_info[0:2]) # e.g. pywintypes27.dll
build_exe_options['include_files'].append((os.path.join(GetSystemDirectory(), pywintypes_dll), pywintypes_dll))
else:
build_exe_options['packages'].append("subprocess")
build_exe_options['packages'].append("encodings")
arch_lib_path = ("/lib/%s-linux-gnu" % os.uname()[4])
shared_objects = ["libc.so.6", "libpthread.so.0", "libz.so.1", "libdl.so.2", "libutil.so.1", "libm.so.6", "libgcc_s.so.1", "ld-linux-x86-64.so.2"]
lib_paths = ["/lib", arch_lib_path, "/lib64"]
for so in shared_objects:
for lib in lib_paths:
lib_path = "%s/%s" % (lib, so)
if os.path.isfile(lib_path):
build_exe_options['include_files'].append((lib_path, so))
break
После проверки оригинального cx_frozen бен это кажется динамические библиотеки играют там роль и перехват вызовов отлично. Хотя теперь я нахожусь в той части, где pthread segfaults из-за того, что он пытается использовать системы libc вместо моих (проверяется с помощью ldd и gdb).
Мой вопрос довольно прост, этот метод, который я пытаюсь, ужасен, так как он не регрессирует с рекурсивным решением. Поэтому мой вопрос: «Каков лучший способ сделать это?» Или мне нужно написать рекурсивное решение в моем установщике? »
И для того, чтобы победить Решение: «Вместо этого используйте собственный Python», у нас есть некоторые аппаратные устройства (думаю, 2 ~ 4U) с Linux (и доступ Bash), где мы также хотим запустить это. портирование всего python (с его динамическими ссылками и т. д.) выглядело как способ много работать, когда мы можем cx_freeze его и отправить библиотеки.
Я хотел бы отметить, что я прочитал [link] (http://hackerboss.com/how-to-distribute-commercial-python-applications/) – Stolas