Не удалось импортировать algoliasearch в мою папку lib - PullRequest
2 голосов
/ 06 мая 2019

Я хочу импортировать 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

this:

from helpers import endpoint, is_async_available

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Есть ли причина, по которой вы не можете просто включить пакет algoliasearch в качестве зависимости, вместо того, чтобы продавать его таким образом?

Например, в requirements.txt:

algoliasearch==2.0.0

(или какая версия вам нужна)

0 голосов
/ 14 мая 2019

Поскольку я не работал четко, я установил все в свою папку lib в моем приложении. На самом деле, для установки в lib достаточно только пакета algolia, который находится в глобальном состоянии, если этого не происходит в среде ядра приложения.

Что я делаю, как решение

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'

но проблема в том, что когда я работаю над проектом движка приложения Python в Visual Studio 2017, странная визуальная студия жалуется на какую-то середину импортируемых пакетов.

В качестве обходного пути также установите algolia в глобальном масштабе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...