una paquetes modulos lista libreria importar crear como comando bibliotecas python python-3.x embedding standard-library

paquetes - Incrustar Python3 sin biblioteca estándar



lista de modulos de python (1)

EDITAR: He hecho una pregunta opuesta aquí: Cómo incrustar Python3 con la biblioteca estándar

Aquí se proporciona una solución para Python2: ¿es posible incrustar python sin la biblioteca estándar?

Sin embargo, Python3 falla en Py_Initialize(); con:

Fatal Python error: Py_Initialize: unable to load the file system codec ImportError: No module named ''encodings''

Esto tiene sentido porque los archivos fuente py3 son utf-8 de forma predeterminada. Parece que requiere un binario externo solo para analizar los archivos fuente de py3.

¿Entonces lo que hay que hacer?

Parece que necesito ubicar las encodings binarias en la instalación de Python de mi sistema, copiar esto en el árbol de mi proyecto y quizás establecer alguna variable de entorno PYTHONPATH (?) Para que mi libpython.dylib pueda encontrarlo.

¿Es posible evitar esto? Y si no, ¿alguien puede aclarar los pasos que debo seguir? ¿Habrá más contratiempos?

NOTA: Para la posteridad, así es como obtuve un libpython.dylib autónomo vinculándolo a mi proyecto en OSX:

Primero ubico mi sistema Biblioteca de Python: /usr/local/Frameworks/Python.framework/Versions/3.4/Python (en mi caso fue instalado con homebrew).

Ahora yo:

  • Copie el .dylib en la carpeta de mi proyecto creando ./Libs/libpython3.4.1_OSX.dylib

  • Acceda a las build settings -> linking y establezca other linker flags a -lpython3.4.1_OSX

En este punto, parecerá que funciona. Sin embargo, si sabes intentar compilarlo en una nueva instalación de OSX, fallará. Esto es porque:

$ otool -D ./libpython3.4.1_OSX.dylib ./libpython3.4.1_OSX.dylib: /usr/local/Frameworks/Python.framework/Versions/3.4/Python

El .dylib todavía se mantiene en su ubicación anterior. Es realmente extraño para mí que .dylib contenga un enlace a su ubicación, ya que cualquier cosa que lo use debe saber dónde está para poder invocarlo en primer lugar.

Podemos corregir esto con:

$ install_name_tool -id @rpath/libpython3.4.1_OSX.dylib libpython3.4.1_OSX.dylib

Pero también en nuestro proyecto Xcode debemos:

  • Ir a las build phases . Agregue un paso de copy files que libpython3.4.1_OSX.dylib a Frameworks (ese es el lugar correcto para ponerlo).
  • Vaya a las build settings -> linking y establezca las runpath search paths en @executable_path/../Frameworks/libpython3.4.1_OSX.dylib a @executable_path/../Frameworks/libpython3.4.1_OSX.dylib

Finalmente necesito ir al edit scheme -> run -> arguments -> environment variables y agregar PYTHONHOME con valor ../Frameworks

Sospecho que para que esto funcione también necesitaré agregar un PYTHONPATH

Campo de golf:
https://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
http://qin.laya.com/tech_coding_help/dylib_linking.html
https://github.com/conda/conda-build/issues/279#issuecomment-67241554
¿Pueden ayudarme a comprender cómo funcionan las bibliotecas Mach-O en Mac Os X?
http://nshipster.com/launch-arguments-and-environment-variables/


Intenté esto y tardaría más tiempo de lo que desea invertir en incrustar Python 3 sin la biblioteca de Python.

Algunos módulos de la biblioteca son necesarios para ejecutar Python 3 y requeriría muchas modificaciones para que funcione sin ellos.