Uso de dos bibliotecas de Python con nombres en conflicto
Quiero usar dos bibliotecas de Python (Google'sBiblioteca en la nube, y ellosSDK en la nube) en una sola aplicación, pero tienen nombres en conflicto (ambos usangoogle
en sus nombres de importación base y no use importaciones relativas internamente). ¿Cómo puedo usarlos en una sola aplicación?
Cambiar el código de la biblioteca para usar importaciones relativas adecuadas no es práctico. Además, sé que puedo usar virtualenv para acceder a estas bibliotecas desde aplicaciones de Python separadas, pero ¿cómo puedo acceder a ellas desde la misma aplicación de Python?
Detalles del conflicto de nombresEstos son algunos de los detalles sobre la importación. Cuando importo un módulo de la Biblioteca de la nube (ejecutoimport google.cloud.datastore
), hay una excepción sobre otra importación dentro de esa biblioteca:
>>> import libs.google.cloud.datastore
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\[ProjectDIR]\libs\google\cloud\datastore\__init__.py", line 52, in <module>
from google.cloud.datastore.batch import Batch
ImportError: No module named cloud.datastore.batch
La biblioteca está intentando hacer una importación absoluta, en lugar de una relativa. La razón por la que Google Cloud Library no puede importargoogle.cloud.datastore.batch
es porquegoogle
ya está definido en el SDK, hay un conflicto de nombres:
>>> print google.__path__
['C:\\Program Files (x86)\\Google\\Cloud SDK\\google-cloud-sdk\\platform\\google_appengine\\google']
Porque la biblioteca de la nube usa importaciones absolutas y el nombregoogle
ya está definido en el SDK, entonces la importación falla.