Приложение вылетает при запуске при компиляции с py2app и включенным boto3 - PullRequest
0 голосов
/ 03 октября 2018

Я создал сложное приложение, которое использует boto3.Работает нормально при запуске из командной строки.Но когда я пытаюсь скомпилировать его с помощью py2app, создается файл приложения, но он вылетает при запуске.Я упростил его до 2 файлов и обнаружил, что он вылетает, когда включен boto3, но работает нормально, когда boto3 не включен.

setup.py

import sys
from setuptools import setup

APP = ['hello.py']
OPTIONS = {'iconfile':'img/icon.icns',}
setup(
    app = APP,
    options = {'py2app': OPTIONS},
    setup_requires = ['py2app'],
)

hello.py

from tkinter import *
import boto3

root = Tk()

w = Label(root, text="Hello, world!")
w.pack()

root.mainloop()

Я использую последнюю версию всего, python 3.7 на MacOS 10.14 и 10.13.

Я использую командную строку:

python3 setup.py py2app

Когда я компилирую, включая boto3, я получаю эти ошибки от py2app.Я не могу найти способ установить эти модули с помощью pip.

Modules not found (unconditional imports):
 * OpenSSL (botocore.vendored.requests.packages.urllib3.contrib.pyopenssl, urllib3.contrib.pyopenssl)
 * OpenSSL.SSL (urllib3.contrib.pyopenssl)
 * Queue (botocore.vendored.requests.packages.urllib3.connectionpool)
 * Queue.Empty (urllib3.util.queue)
 * Queue.Full (urllib3.util.queue)
 * Queue.LifoQueue (urllib3.util.queue)
 * StringIO.StringIO (botocore.vendored.requests.packages.urllib3.packages.six, botocore.vendored.six, pkg_resources._vendor.six, six, urllib3.packages.six)
 * _abcoll (botocore.vendored.requests.packages.urllib3.packages.ordered_dict, urllib3.packages.ordered_dict)
 * backports.ssl_match_hostname (botocore.vendored.requests.packages.urllib3.packages.ssl_match_hostname, urllib3.packages.ssl_match_hostname)
 * botocore.vendored.six.moves (botocore.httpsession, botocore.vendored.six.moves.urllib.request) [module alias]
 * botocore.vendored.six.moves.http_client (botocore.vendored.six.moves.urllib, botocore.vendored.six.moves.urllib_parse) [module alias]
 * botocore.vendored.six.moves.urllib (botocore.utils) [module alias]
 * botocore.vendored.six.moves.urllib.request (botocore.utils) [module alias]
 * botocore.vendored.six.moves.urllib_parse (botocore.httpsession) [module alias]
 * com (com.sun.jna)
 * com.jna (com.sun)
 * com.sun (com.sun.jna.platform)
 * cryptography (cryptography, cryptography.hazmat.backends, cryptography.x509.extensions, urllib3.contrib.pyopenssl)
 * cryptography.hazmat (cryptography.hazmat.backends.openssl)
 * cryptography.hazmat.backends (cryptography.hazmat.backends.openssl.x509, urllib3.contrib.pyopenssl)
 * cryptography.hazmat.backends.openssl (urllib3.contrib.pyopenssl)
 * cryptography.hazmat.backends.openssl.backend (cryptography.hazmat.backends.openssl.x509)
 * cryptography.hazmat.backends.openssl.x509 (urllib3.contrib.pyopenssl)
 * cryptography.x509 (cryptography.hazmat, cryptography.x509, urllib3.contrib.pyopenssl)
 * cryptography.x509.UnsupportedExtension (cryptography, cryptography.x509.extensions)
 * dummy_thread (botocore.vendored.requests.packages.urllib3.packages.ordered_dict, urllib3.packages.ordered_dict)
 * httplib (botocore.vendored.requests.packages.urllib3.connection, botocore.vendored.requests.packages.urllib3.response)
 * httplib.HTTPConnection (botocore.compat, botocore.vendored.requests.packages.urllib3.response)
 * httplib.HTTPException (botocore.compat, botocore.vendored.requests.packages.urllib3.response)
 * httplib.HTTPResponse (botocore.vendored.requests.packages.urllib3.connection, botocore.vendored.requests.packages.urllib3.response)
 * itertools.izip (collections)
 * itertools.izip_longest (collections)
 * ndg (botocore.vendored.requests.packages.urllib3.contrib.pyopenssl, ndg.httpsclient.subj_alt_name)
 * ndg.SUBJ_ALT_NAME_SUPPORT (ndg.httpsclient)
 * ndg.httpsclient (botocore.vendored.requests.packages.urllib3.contrib.pyopenssl)
 * ndg.httpsclient.subj_alt_name (botocore.vendored.requests.packages.urllib3.contrib.pyopenssl)
 * ordereddict (botocore.compat, pkg_resources._vendor.pyparsing)
 * pyasn1 (botocore.vendored.requests.packages.urllib3.contrib.pyopenssl)
 * pyasn1.decoder (pyasn1.type)
 * pyasn1.type (botocore.vendored.requests.packages.urllib3.contrib.pyopenssl)
 * simplejson (botocore.vendored.requests.compat)
 * six.moves (dateutil.rrule, dateutil.tz.tz, dateutil.tz.win) [module alias]
 * six.moves._thread (dateutil.tz.win) [module alias]
 * six.moves.winreg (dateutil.rrule, dateutil.tz.tz)
 * thread (botocore.vendored.requests.packages.urllib3.packages.ordered_dict, urllib3.packages.ordered_dict)
 * urllib3.packages.six.moves (urllib3.connection, urllib3.connectionpool, urllib3.exceptions, urllib3.packages.six.moves, urllib3.packages.six.moves.urllib.parse, urllib3.response, urllib3.util.queue, urllib3.util.response) [module alias]
 * urllib3.packages.six.moves.http_client (urllib3.connection, urllib3.connectionpool, urllib3.exceptions, urllib3.packages.six.moves.http_client, urllib3.packages.six.moves.urllib, urllib3.util.queue) [module alias]
 * urllib3.packages.six.moves.queue (urllib3.packages.six.moves.http_client, urllib3.packages.six.moves.urllib, urllib3.response, urllib3.util.response) [module alias]
 * urllib3.packages.six.moves.urllib (urllib3.poolmanager, urllib3.request) [module alias]
 * urllib3.packages.six.moves.urllib.parse (urllib3.poolmanager, urllib3.request) [module alias]
 * urlparse (botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.parse_qs (botocore.vendored.requests.compat, botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.parse_qsl (botocore.vendored.requests.compat, botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.urldefrag (botocore.compat, botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.urlparse (botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.urlsplit (botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.urlunparse (botocore.compat, botocore.vendored.requests.packages.urllib3.poolmanager)
 * urlparse.urlunsplit (botocore.vendored.requests.compat, botocore.vendored.requests.packages.urllib3.poolmanager)
 * win32com (win32com)
 * win32com.shell (win32com.shell)
 * win32com.shellcon (win32com.shell)

Modules not found (conditional imports):
 * Cookie (botocore.vendored.requests.compat)
 * OpenSSL.crypto (urllib3.contrib.pyopenssl)
 * Queue (urllib3.util.queue)
 * StringIO (botocore.vendored.requests.compat, botocore.vendored.requests.packages.urllib3.packages.six, botocore.vendored.six, pkg_resources._vendor.six, six, urllib3.packages.six)
 * botocore.vendored.six.moves (botocore.httpsession, botocore.vendored.six.moves.urllib.request) [module alias]
 * com (pkg_resources._vendor.appdirs)
 * com.sun.jna (pkg_resources._vendor.appdirs)
 * com.sun.jna.platform (pkg_resources._vendor.appdirs)
 * cookielib (botocore.vendored.requests.compat)
 * cryptography.x509.extensions (urllib3.contrib.pyopenssl)
 * email.Utils ()
 * httplib (botocore.compat)
 * simplejson (botocore.compat)
 * urllib2 (botocore.vendored.requests.compat)
 * urlparse (botocore.compat, botocore.vendored.requests.compat)
 * win32com (pkg_resources._vendor.appdirs)
 * win32com.shell (pkg_resources._vendor.appdirs)

Когда я компилирую без boto3, я получаю эти ошибки, и приложение работает:

Modules not found (unconditional imports):
 * com (com.sun.jna)
 * com.jna (com.sun)
 * com.sun (com.sun.jna.platform)
 * ordereddict (pkg_resources._vendor.pyparsing)
 * win32com (win32com)
 * win32com.shell (win32com.shell)
 * win32com.shellcon (win32com.shell)

Modules not found (conditional imports):
 * StringIO (pkg_resources._vendor.six)
 * com (pkg_resources._vendor.appdirs)
 * com.sun.jna (pkg_resources._vendor.appdirs)
 * com.sun.jna.platform (pkg_resources._vendor.appdirs)
 * win32com (pkg_resources._vendor.appdirs)
 * win32com.shell (pkg_resources._vendor.appdirs)

Но согласноРазработчик py2app эти предупреждения не очень важны

Я выделил единственную ошибку, которая отличается между двумя программами на консоли, но не очень полезна: введите описание изображения здесь

Я полностью прочитал stackoverflow, но это также первый раз, когда я пытался скомпилировать программу на Python.Так что проблема либо в чем-то очень уникальном и необычном, либо я совершил ошибку новичка.

Я пробовал что-то похожее с pyinstaller.Он строит без ошибок, но вылетает, когда exicex выполнено с этой ошибкой:

distutils.errors.DistutilsModuleError: invalid command 'build'
[42556] Failed to execute script setup

Когда я пытался с nuitka, я получаю эту ошибку:

Davids-MBP:App degner$ python3 -m nuitka --follow-imports setup.py 
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/__init__.py:11: Cannot find 'setuptools.extern.six' in package 'setuptools' as absolute import (tried setuptools.extern.six).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/__init__.py:12: Cannot find 'setuptools.extern.six.moves' in package 'setuptools' as absolute import (tried setuptools.extern.six.moves).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/command/easy_install.py:46: Cannot find 'setuptools.extern.six.moves' in package 'setuptools.command' as absolute import (tried setuptools.extern.six.moves).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/command/easy_install.py:46: Cannot find 'setuptools.extern.six' in package 'setuptools.command' as absolute import (tried setuptools.extern.six).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/wheel.py:12: Cannot find 'setuptools.extern.packaging.utils' in package 'setuptools' as absolute import (tried setuptools.extern.packaging.utils).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/wheel.py:12: Cannot find 'setuptools.extern.packaging' in package 'setuptools' as absolute import (tried setuptools.extern.packaging).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/pep425tags.py:152: Cannot find '_manylinux' in package 'setuptools' as absolute import (tried _manylinux).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/ssl_support.py:45: Cannot find 'backports.ssl_match_hostname' in package 'setuptools' as absolute import (tried backports.ssl_match_hostname).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/sandbox.py:18: Cannot find 'org.python.modules.posix.PosixModule' in package 'setuptools' as absolute import (tried org.python.modules.posix.PosixModule).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/sandbox.py:18: Cannot find 'org.python.modules.posix' in package 'setuptools' as absolute import (tried org.python.modules.posix).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/sandbox.py:18: Cannot find 'org.python.modules' in package 'setuptools' as absolute import (tried org.python.modules).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/sandbox.py:18: Cannot find 'org.python' in package 'setuptools' as absolute import (tried org.python).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/sandbox.py:18: Cannot find 'org' in package 'setuptools' as absolute import (tried org).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/config.py:10: Cannot find 'setuptools.extern.packaging.version' in package 'setuptools' as absolute import (tried setuptools.extern.packaging.version).
Nuitka:WARNING:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/setuptools/dist.py:31: Cannot find 'setuptools.extern.packaging.specifiers' in package 'setuptools' as absolute import (tried setuptools.extern.packaging.specifiers).
In file included from setup.build/CompiledCodeHelpers.c:1983:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/nuitka/build/static_src/HelpersAttributes.c:553:6: error: conflicting types for 'SET_ATTRIBUTE'
bool SET_ATTRIBUTE(PyObject *target, PyObject *attr_name, PyObject *value) {
     ^
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/nuitka/build/include/nuitka/helper/attributes.h:34:13: note: previous declaration is here
extern bool SET_ATTRIBUTE(PyObject *target, PyObject *attr_name, PyObject *value);
            ^
In file included from setup.build/CompiledCodeHelpers.c:1983:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/nuitka/build/static_src/HelpersAttributes.c:594:6: error: conflicting types for 'SET_ATTRIBUTE_DICT_SLOT'
bool SET_ATTRIBUTE_DICT_SLOT(PyObject *target, PyObject *value) {
     ^
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/nuitka/build/include/nuitka/helper/attributes.h:37:13: note: previous declaration is here
extern bool SET_ATTRIBUTE_DICT_SLOT(PyObject *target, PyObject *value);
            ^
In file included from setup.build/CompiledCodeHelpers.c:1983:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/nuitka/build/static_src/HelpersAttributes.c:646:6: error: conflicting types for 'SET_ATTRIBUTE_CLASS_SLOT'
bool SET_ATTRIBUTE_CLASS_SLOT(PyObject *target, PyObject *value) {
     ^
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/nuitka/build/include/nuitka/helper/attributes.h:40:13: note: previous declaration is here
extern bool SET_ATTRIBUTE_CLASS_SLOT(PyObject *target, PyObject *value);
            ^
3 errors generated.
scons: *** [setup.build/CompiledCodeHelpers.o] Error 1

1 Ответ

0 голосов
/ 10 октября 2018

В py2app возникла проблема, из-за которой он был несовместим с шестью модулями.

Теперь это исправлено.

https://bitbucket.org/ronaldoussoren/py2app/issues/250/app-crashes-on-launch-when-compiled-with

...