Заставьте `setup.py` использовать setuptools - PullRequest
0 голосов
/ 22 мая 2011

Я использую этот код:

code = 'import setuptools;__file__={0!r};execfile(__file__)'.format(os.path.join(path, 'setup.py'))
args = ['install', '--single-version-externally-managed']
subprocess.check_call([sys.executable, '-c', code, args])

Чтобы выполнить setup.py и установить пакет. Проблема возникает, когда setup.py использует distutils вместо setuptools: --single-версия-внешне управляемая не распознается distutils.

Как я могу заставить setup.py использовать setuptools?

1 Ответ

2 голосов
/ 09 сентября 2011

То, что вы написали, это в основном то, что делает пипс. Основываясь на написанном вами коде, вы будете использовать функцию setup setuptools, поскольку вы импортировали ее из setuptools. Setuptools прокладывает путь над setup функцией Distutils в ее __init__.py. Следовательно, не имеет значения, импортирует ли скрипт setup.py distutils или нет. Setuptools всегда победит ...

Если по какой-то причине у вас все еще есть проблемы при выполнении вашей команды. Попробуйте скомпилировать файл перед выполнением. exec(compile(...)) вместо execfile(...)

В ответ на ответ @jknair ... Я также не рекомендовал бы использовать ez_setup.py, потому что он дублирует код, имеет неожиданное поведение и часто исключается при распространении пакетов (что затрудняет запуск таких инструментов, как pip setup.py без ImportError).

...