Pregunta

¿Hay alguna forma de hacer que un módulo de Python cargue un dll en el directorio de mi aplicación en lugar de la versión que vino con la instalación de python, sin realizar cambios en la instalación de python (que luego requeriría que hiciera un instalador, y tenga cuidado) No rompí otras aplicaciones para la gente al sobreescribir módulos de Python y cambiar las versiones dll globaly ...)?

Específicamente, me gustaría que python use mi versión de sqlite3.dll, en lugar de la versión que vino con python (que es más antigua y no parece tener el módulo fts3).

¿Fue útil?

Solución 2

Ok, prueba que Python siempre carga la dll en el mismo directorio que el archivo pyd, independientemente de las rutas de python y os.

Así que necesitaba copiar el _sqlite3.pyd de python / v2.5 / DLLS a mi directorio de aplicaciones donde está el nuevo sqlite3.dll, haciéndolo cargar mi nueva dll, en lugar del que viene con python (ya que los archivos pyd parecen seguir el PYTHONPATH, a pesar de que los archivos dll de actaul no lo hacen).

Otros consejos

Si estás hablando de las DLL de módulos de Python, simplemente modificar sys.path debería estar bien. Sin embargo, si estás hablando de archivos DLL vinculados contra esos archivos DLL; es decir, un libfoo.dll del cual depende un foo.pyd , entonces necesita modificar su variable de entorno PATH. Escribí sobre haciendo esto para PyGTK hace un tiempo , pero en su caso, creo que debería ser tan simple como:

import os
os.environ['PATH'] = 'my-app-dir' + os.pathsep + os.environ['PATH']

Eso insertará my-app-dir al principio de su ruta de Windows, que creo que también controla el orden de carga de los DLL.

Tenga en cuenta que tendrá que hacer esto antes de cargar la DLL en cuestión, es decir, antes de importar cualquier cosa interesante.

Sin embargo,

sqlite3 puede ser un caso un poco especial, ya que se distribuye con Python; obviamente es un poco difícil probar esto rápidamente, por lo que no he revisado sqlite3.dll específicamente.

Si su versión de sqlite está en sys.path antes de la versión del sistema, la usará. Así que puedes ponerlo en el directorio actual o cambiar la variable de entorno PYTHONPATH para hacer eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top