无法将 algoliasearch 导入我的 lib 文件夹
Failed to import algoliasearch to my lib folder
我想将 algolia python 库导入我的 python 3 应用引擎项目。
所以我做了
pip install algoliasearch -t lib
并在我的 lib 文件夹中创建了 __init__.py
然后在我的项目中我导入使用
from lib.algoliasearch.search_client import SearchClient
到目前为止一切顺利。但是在 algolia 库中,例如
lib\algoliasearch\search_client.py
还有如下导入语句:
from algoliasearch.helpers import endpoint, is_async_available
这在我全局安装时有效,否则安装在 lib 文件夹中,当我部署应用程序引擎时它不起作用。
作为解决方案,我可以更新这些文件
from lib.algoliasearch.helpers import endpoint, is_async_available
这是一个糟糕的解决方案。
另一方面,如果我申请:
import sys
sys.path.insert(0, './lib')
这一次,它有几个地方坏了,即
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
if not libcrypto_path:
raise LibraryNotFoundError('The library libcrypto could not be found')
在
lib\asn1crypto\_perf\_big_num_ctypes.py
如何正确导入这个 algoliasearch 库?
注意:我猜,Algolia 团队应该通过提供相对路径来更新他们的包,例如:
而不是
from algoliasearch.helpers import endpoint, is_async_available
这个:
from helpers import endpoint, is_async_available
你有什么理由不能将 algoliasearch
包作为依赖项而不是像那样出售它?
例如,在 requirements.txt
中:
algoliasearch==2.0.0
(或您需要的任何版本)
由于我没有清楚地工作,我将所有内容都安装到我的应用程序中的 lib 文件夹中。
事实上,只有 algolia 包足以安装到 lib else 是全局的,只要它不在应用程序引擎环境中。
我做的就是解决方案
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
注意不是插入到首位,不要这样做:
sys.path.insert(0,os.path.join(os.path.dirname(__file__), "lib"))
否则,它会覆盖全局包,即
Traceback (most recent call last):
File "C:\my_project\main.py", line 11, in <module>
from algoliasearch.responses import Response
File "C:\my_project\lib\algoliasearch\responses.py", line 3, in <module>
from typing import List, Union, Optional
File "C:\my_project\lib\typing.py", line 1356, in <module>
class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
File "C:\my_project\lib\typing.py", line 1004, in __new__
self._abc_registry = extra._abc_registry
AttributeError: type object 'Callable' has no attribute '_abc_registry'
但问题是,当我在 visual studio 2017 年从事 python 应用引擎项目时,
奇怪的是 visual studio 在导入包的中间抱怨。
作为解决此问题的方法,也请全局安装 algolia。
我想将 algolia python 库导入我的 python 3 应用引擎项目。
所以我做了
pip install algoliasearch -t lib
并在我的 lib 文件夹中创建了 __init__.py
然后在我的项目中我导入使用
from lib.algoliasearch.search_client import SearchClient
到目前为止一切顺利。但是在 algolia 库中,例如
lib\algoliasearch\search_client.py
还有如下导入语句:
from algoliasearch.helpers import endpoint, is_async_available
这在我全局安装时有效,否则安装在 lib 文件夹中,当我部署应用程序引擎时它不起作用。
作为解决方案,我可以更新这些文件
from lib.algoliasearch.helpers import endpoint, is_async_available
这是一个糟糕的解决方案。
另一方面,如果我申请:
import sys
sys.path.insert(0, './lib')
这一次,它有几个地方坏了,即
libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
if not libcrypto_path:
raise LibraryNotFoundError('The library libcrypto could not be found')
在
lib\asn1crypto\_perf\_big_num_ctypes.py
如何正确导入这个 algoliasearch 库?
注意:我猜,Algolia 团队应该通过提供相对路径来更新他们的包,例如:
而不是
from algoliasearch.helpers import endpoint, is_async_available
这个:
from helpers import endpoint, is_async_available
你有什么理由不能将 algoliasearch
包作为依赖项而不是像那样出售它?
例如,在 requirements.txt
中:
algoliasearch==2.0.0
(或您需要的任何版本)
由于我没有清楚地工作,我将所有内容都安装到我的应用程序中的 lib 文件夹中。 事实上,只有 algolia 包足以安装到 lib else 是全局的,只要它不在应用程序引擎环境中。
我做的就是解决方案
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
注意不是插入到首位,不要这样做:
sys.path.insert(0,os.path.join(os.path.dirname(__file__), "lib"))
否则,它会覆盖全局包,即
Traceback (most recent call last):
File "C:\my_project\main.py", line 11, in <module>
from algoliasearch.responses import Response
File "C:\my_project\lib\algoliasearch\responses.py", line 3, in <module>
from typing import List, Union, Optional
File "C:\my_project\lib\typing.py", line 1356, in <module>
class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
File "C:\my_project\lib\typing.py", line 1004, in __new__
self._abc_registry = extra._abc_registry
AttributeError: type object 'Callable' has no attribute '_abc_registry'
但问题是,当我在 visual studio 2017 年从事 python 应用引擎项目时, 奇怪的是 visual studio 在导入包的中间抱怨。
作为解决此问题的方法,也请全局安装 algolia。