В zc.buildout как установить яйцо A, а затем установить яйцо B, для которого нужно правильно установить яйцо A? - PullRequest
1 голос
/ 25 февраля 2012

В частности, вот ситуация, с которой я сталкиваюсь:

Я использую zc.buildout для установки приложения, для которого требуется pymssql.Pymssql требует Cython для правильной установки.Однако я не хотел бы изменять свою рабочую среду, поэтому я хотел бы сделать что-то вроде:

  1. Установить Cython
  2. Загрузить Cython в buildout
  3. Установить Pymssql.

Я думал, что Buildout уже сделал это, но похоже, что он проверяет setup.cfg, чтобы убедиться, что установлено все, что явно указано как необходимое.На данный момент моя сборка выглядит так:

[buildout]
  parts = required-eggs
  ...

[required-eggs]
  eggs = Cython
         pymssql

Cython отлично устанавливается.К сожалению, pymssql не делает:

    return self.build_and_install(setup_script, setup_base)
  File "/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1101, in build_and_install
self.run_setup(setup_script, setup_base, args)
  File "/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1090,  in run_setup
run_setup(setup_script, args)
  File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 29, in run_setup
lambda: execfile(
  File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 70, in run
return func()
  File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 31, in <lambda>
{'__file__':setup_script, '__name__':'__main__'}
  File "setup.py", line 41, in <module>
ImportError: No module named Cython.Distutils

Таким образом, я думаю, что Cython установлен как яйцо, но не загружен в процесс python, который выполняет buildout.Есть ли какая-то конфигурация в buildout, которая позволит мне сделать это?

1 Ответ

2 голосов
/ 25 февраля 2012

Пакет pymssql объявляет яйцо Cython как зависимость setup_requires, но не дает distutils времени для его установки.Просто перечислить их в setup_requires, но попытаться импортировать их в области видимости модуля (как это делает pymssql) недостаточно.

Модуль setup.py должен быть реструктурирован, чтобы не импортировать Cythonзависимость до тех пор, пока строка setup_requires не будет проанализирована, и перечисленные там зависимости не будут доступны.По сути, он должен определить свой собственный класс build_cmd, который при создании экземпляра импортирует зависимость Cython и переносит этот класс в это время, а не раньше.

Возможно, вы могли бы создать собственныйРецепт buildout, который использует Cython в качестве зависимости, которая затем может установить зависимость pymssql с Cython, установленным buildout, когда он выполняет ваш рецепт, но это пластырь на этой ране, с которым pymssql действительно должен иметь дело.

...