Tengo una aplicación en un script de python my_app.py
y quiero hacer un ejecutable independiente con MacOS (10.14). Siguiendo el video-tutorial aquí , ingresé secuencialmente los siguientes comandos:
pip install virtualenv virtualenv venv --system-site-packages source venv/bin/activate pip install py2app cd /path/to/my_app.py python setup.py py2app -A
con el siguiente archivo setup.py
:
from setuptools import setup APP = ["my_app.py"] DATA_FILES = [] OPTIONS = { "argv_emulation": True, "packages": ["certifi"], } setup( app = APP, data_files = DATA_FILES, options = {"py2app": OPTIONS}, setup_requires = ["py2app"] )
pero recibió el siguiente mensaje de error:
Traceback (most recent call last): File "setup.py", line 13, in setup_requires = ["py2app"] File "/Users/mymac/venv/lib/python3.7/site-packages/setuptools/__init__.py", line 145, in setup return distutils.core.setup(**attrs) File "/Users/mymac/anaconda3/lib/python3.7/distutils/core.py", line 148, in setup dist.run_commands() File "/Users/mymac/anaconda3/lib/python3.7/distutils/dist.py", line 966, in run_commands self.run_command(cmd) File "/Users/mymac/anaconda3/lib/python3.7/distutils/dist.py", line 984, in run_command cmd_obj.ensure_finalized() File "/Users/mymac/anaconda3/lib/python3.7/distutils/cmd.py", line 107, in ensure_finalized self.finalize_options() File "/Users/mymac/venv/lib/python3.7/site-packages/py2app/build_app.py", line 567, in finalize_options if isinstance(self.plist, plistlib.Dict): AttributeError: module 'plistlib' has no attribute 'Dict'
Con ese mensaje de error, encontré esa página de github y escribí el siguiente código:
brew install qt # will install qt-5.xx brew install libxml2 make qt5py3 python3 labelImg.py python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE] As a side note, if mssing pyrcc5 or lxml, try pip3 install pyqt5 lxml
Sin embargo, después de entrar en la línea, make qt5py3
, obtengo:
make: *** No rule to make target `qt5py3'. Stop.
También probé los siguientes comandos:
brew install python3 pip install pipenv pipenv --three pipenv shell pip install py2app pip install PyQt5 lxml make qt5py3 rm -rf build dist python setup.py py2app -A mv "dist/labelImg.app" /Applications
Pero también consiguió
make: *** No rule to make target `qt5py3'. Stop.
después de entrar en la línea make qt5py3
Publiqué un problema en github
¿Qué estoy haciendo mal?
plistlib.Dict
estaba disponible pero no documentado. En Python 3.4 fue finalmente documentado ; También se documenta que está en desuso desde la versión 3.0.
En Python 3.7 ya no está documentado y quizás se haya eliminado de la biblioteca plistlib
.
Esto significa que py2app
actualmente no es compatible con Python 3.7. Encontré este problema , se informó hace medio año y se resolvió unos días después. La resolución es: actualice py2app
a la última versión 0.15 con el siguiente comando:
pip3.7 install -U py2app
Verifique la versión con
pip show py2app