"Ошибка ввода-вывода: не найден каталог с информацией о яйцах" с paster на Plone 4.3.3

Ошибка возникает также при использовании zopeskel в Plone 4.3.3. Похоже, это немного отличается от этого вопроса. Под Plone 4.3.2 ошибки нет.

$ ../bin/paster create plone_basic
Selected and implied templates:
  PasteScript#basic_package  A basic setuptools-enabled package

Variables:
  egg:      plone_basic
  package:  plone_basic
  project:  plone_basic
Enter version (Version (like 0.1)) ['']:
Enter description (One-line description of the package) ['']:
Enter long_description (Multi-line description (in reST)) ['']:
Enter keywords (Space-separated keywords/tags) ['']:
Enter author (Author name) ['']:
Enter author_email (Author email) ['']:
Enter url (URL of homepage) ['']:
Enter license_name (License name) ['']:
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:
Creating template basic_package
Creating directory ./plone_basic
  Recursing into +package+
    Creating ./plone_basic/plone_basic/
    Copying __init__.py to ./plone_basic/plone_basic/__init__.py
  Copying setup.cfg to ./plone_basic/setup.cfg
  Copying setup.py_tmpl to ./plone_basic/setup.py
Running /home/Plone-4.3.3/Python-2.7/bin/python setup.py egg_info
Traceback (most recent call last):
  File "/home/Plone-4.3.3/zeocluster/bin/paster", line 259, in <module>
    sys.exit(paste.script.command.run())
  File "/home/Plone-4.3.3/buildout-cache/eggs/PasteScript-1.7.5-py2.7.egg/paste/script/command.py", line 104, in run
    invoke(command, command_name, options, args[1:])
  File "/home/Plone-4.3.3/buildout-cache/eggs/PasteScript-1.7.5-py2.7.egg/paste/script/command.py", line 143, in invoke
    exit_code = runner.run(args)
  File "/home/Plone-4.3.3/buildout-cache/eggs/PasteScript-1.7.5-py2.7.egg/paste/script/command.py", line 238, in run
    result = self.command()
  File "/home/Plone-4.3.3/buildout-cache/eggs/PasteScript-1.7.5-py2.7.egg/paste/script/create_distro.py", line 170, in command
    egg_info_dir = pluginlib.egg_info_dir(output_dir, dist_name)
  File "/home/Plone-4.3.3/buildout-cache/eggs/PasteScript-1.7.5-py2.7.egg/paste/script/pluginlib.py", line 135, in egg_info_dir
    % ', '.join(all))
IOError: No egg-info directory found (looked in ./plone_basic/./plone_basic.egg-info, ./plone_basic/setup.py/plone_basic.egg-info, ./plone_basic/plone_basic/plone_basic.egg-info, ./plone_basic/setup.cfg/plone_basic.egg-info)

1 ответ

Обходной путь 1:

Проблема, кажется, отсутствует setuptools, После установки setuptools, тогда paster (и все инструменты на его основе) могут запустить сгенерированный setup.py. Следующее исправило проблему:

wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo -u plone_buildout /usr/local/Plone-4.3.3/Python-2.7/bin/python

UnifiedInstaller-4.3.3 не устанавливает setuptools. Смотрите этот билет.

Как указывает SteveM (см. Комментарии), это не рекомендуемый обходной путь.

(предпочтительный) обходной путь 2:

Сгенерированные данные есть (несмотря на выданную ошибку!), Но setup.py не запустится. Таким образом Paste* каталоги не будут созданы. Позже при запуске buildout он сгенерирует / загрузит Paste* каталоги и т. д.

Если вы хотите, чтобы setup.py был запущен. Вы можете установить патч PasteScript (на свой страх и риск!).

Что касается PasteScript-1.7.5 перейти к строке № 587 /path/to/Plone-4.3.3/buildout-cache/eggs/PasteScript-1.7.5-py2.7.egg/paste/script/command.py и получить текущий sys.path и передать его subprocess.Popen(), Таким образом, setup.py будет работать с zopeskel или же paste среда.

current_env = os.environ.copy()
current_env['PYTHONPATH'] = ':'.join(sys.path)
proc = subprocess.Popen([cmd] + list(args),
                        cwd=cwd,
                        stderr=stderr_pipe,
                        stdout=subprocess.PIPE,
                        env=current_env) # <- pass the env here

Я попытаюсь выяснить ситуации, когда этот обходной путь может вызвать проблемы. Я отправил вопрос на PasteScript: https://bitbucket.org/ianb/pastescript/issue/16/pass-the-syspath-to-the-subprocess-in

Обновление: без генерации / добавления Paste* dirs (запущенная сборка или обходной путь, как указано выше), локальные команды не будут доступны.

Другие вопросы по тегам