无法将algoliasearch导入我的lib文件夹

时间:2019-05-06 15:03:04

标签: python-3.x google-app-engine instantsearch

我想将algolia python lib导入我的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

2 个答案:

答案 0 :(得分:1)

有什么理由不能仅仅将algoliasearch软件包作为依赖项而不是像这样出售它吗?

例如,在requirements.txt中:

algoliasearch==2.0.0

(或您需要的任何版本)

答案 1 :(得分:0)

由于工作不清楚,我将所有内容都安装到了应用程序的lib文件夹中。 实际上,只有algolia软件包足以安装到lib中,而其他软件包则是全局的,只要它不在App Engine环境中即可。

我要做的是解决方案

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。