setup.py с зависимостями, установленными conda (не pip)

Я работаю над существующей базой кода Python 3, которая предоставляет setup.py, поэтому код устанавливается как библиотека Python. Я пытаюсь установить эту внутреннюю библиотеку с ее собственными зависимостями (обычными для науки о данных, например pandas, pyodbc, sqlalchemy и т. Д.).

Я хотел бы иметь эту внутреннюю библиотеку для работы с этими зависимостями и предполагаю, что если эта библиотека установлена, предполагается, что все транзитивные зависимости установлены. Я также хотел бы иметь версию пакета Anaconda (conda), а не версию pip.

Я начал с requirements.txt, но быстро перешел к этому полю в setup.py:

  install_requires=[
      "pyodbc>=4.0.27",
      "sqlalchemy>=1.3.8",
      "pandas>=0.25.1",
      "requests>=2.22.0",
      "assertpy>=0.14",
      "cycler>=0.10.0",
  ]

Однако когда я запускаю процесс установки:

  • либо с python setup.py install --record installed_files.txt
  • или с pip install .

Я вижу, что идет некоторая компиляция gcc / C ++, которая показывает журналы о колесах Python (я не совсем понимаю последствия яиц Python и колес Python, но AFAIK, если conda доступен, я должен использовать версию conda, а не яйца / колеса, потому что тогда мне не нужно заботиться о коде C ++ под кодом Python).

Я действительно предпочел бы, чтобы conda устанавливал эти капли C ++, завернутые в некоторый код Python, в виде библиотек, например. pandas.

  • возможно ли вообще, чтобы conda управлял процессом установки, описанным в setup.py, поэтому я не имею дело с gcc?
  • как я могу убедиться, что другой код Python, зависящий от этой внутренней библиотеки (установленной через setup.py), использует те же (переходные) зависимости, определенные в этом setup.py?

Независимо от метода установки, как я могу убедиться, что зависимости, например, pandas тоже установлены? Иногда я вижу, что numpy как зависимость от pandas не устанавливается при запуске setup.py, но я бы не хотел делать это вручную (например, с каким-то requirements.txt файлом).


person TPPZ    schedule 06.09.2019    source источник


Ответы (1)


pip не знает о conda, поэтому вы не можете создать пакет, устанавливаемый с помощью pip, который извлекает свои зависимости из каналов conda.

conda не заботится о setup.py, он использует другой формат для записи зависимостей.

Чтобы установить код с conda, вы должны создать пакет conda и указать свои зависимости в файле meta.yaml. За подробностями обращайтесь к документации "conda build".

https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html

person Roland Weber    schedule 14.09.2019
comment
Я думаю, это может сбивать с толку, потому что так много пакетов conda в основном являются оболочками для pip install скрипта сборки, поэтому многие пакеты conda имеют setup.py в дополнение к рецепту. например github.com/conda-forge/requests-feedstock/ blob / master / recipe / - person medley56; 15.07.2020
comment
Хотя это могло быть принято, это не ответ на вопрос в заголовке. Измените заголовок, и при необходимости я изменю свой голос на «За». - person user3673; 27.10.2020
comment
@ user3673 Название выбирает человек, задающий вопрос, а не те, кто пишет ответы. - person Roland Weber; 30.10.2020