Usando duas bibliotecas Python com nomes conflitantes
Eu quero usar duas bibliotecas Python (do GoogleCloud Librarye seusCloud SDK) em um único aplicativo, mas eles têm nomes conflitantes (ambos usamgoogle
em seus nomes de importação base e não use importações relativas internamente). Como posso usá-los em um único aplicativo?
Alterar o código da biblioteca para usar importações relativas adequadas não é prático. Além disso, sei que posso usar o virtualenv para acessar essas bibliotecas de aplicativos python separados, mas como eu os acesso no mesmo aplicativo python?
Detalhes do conflito de nomenclaturaAqui estão alguns detalhes sobre a importação. Quando importo um módulo da Cloud Library (executoimport google.cloud.datastore
), há uma exceção sobre outra importação nessa 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
A biblioteca está tentando fazer uma importação absoluta, e não relativa. O motivo pelo qual a Google Cloud Library não pode importargoogle.cloud.datastore.batch
é porquegoogle
já está definido no SDK, há um conflito de nomenclatura:
>>> print google.__path__
['C:\\Program Files (x86)\\Google\\Cloud SDK\\google-cloud-sdk\\platform\\google_appengine\\google']
Como a Cloud Library usa importações absolutas, e o nomegoogle
já está definido no SDK, a importação falha.