Как запустить команду python 'sdist' из автоматизированного скрипта python без использования подпроцесса? - PullRequest
2 голосов
/ 28 марта 2012

Я пишу сценарий для автоматизации упаковки «самодельного» модуля python и распространения его на удаленной машине.

Я использую Pip и создал файл setup.py, но затем яЯ должен вызвать модуль подпроцесса, чтобы вызвать команду «python setup.py sdist».

Я посмотрел на метод «run_setup» в distutils.core, но я пытаюсь вообще избежать использования модуля подпроцесса.(Я не вижу смысла открывать оболочку для запуска команды Python, если я уже на Python ...)

есть ли способ импортировать модуль distutils в мой скрипт и передать информацию о настройке непосредственно одномуего методов и избегать использования команды оболочки полностью?или любые другие предложения, которые могут мне помочь

спасибо

Ответы [ 2 ]

2 голосов
/ 19 февраля 2016

Просто ради полноты, я хотел ответить на это, так как наткнулся на это, пытаясь выяснить, как сделать это самому. В моем случае я хотел быть уверен, что для выполнения команды использовалась версия Python той же , поэтому использование подпроцесса не было хорошим вариантом. (Правка: как указано в комментарии, я мог бы использовать sys.executable с подпроцессом, хотя программное выполнение по-прежнему является IMO более чистым подходом - и, очевидно, довольно простым.)

(Использование distutils.core.run_setup не вызывает подпроцесс, но использует exec в управляемой области / среде.)

from distutils.core import run_setup

run_setup('setup.py', script_args=['sdist'])

Другим вариантом, возможно, является использование команд setuptools, хотя я не исследовал это до конца. Очевидно, вам все еще нужно выяснить, как избежать дублирования метаданных proj.

from setuptools.dist import Distribution
from setuptools.command.sdist import sdist

dist = Distribution({'name': 'my-project', 'version': '1.0.0'}) # etc.
dist.script_name = 'setup.py'
cmd = sdist(dist)
cmd.ensure_finalized()
cmd.run()  # TODO: error handling

В любом случае, надеюсь, это поможет кому-то в правильном направлении. В конце концов, существует множество веских причин для программного выполнения операций упаковки.

0 голосов
/ 29 марта 2012

Если у вас нет реальной причины избегать подпроцессов (то есть отсутствие поддержки платформы, а не только эстетики («я не вижу смысла»)), тогда я предлагаю вам просто не заботиться и не запускать подпроцесс. Есть несколько способов добиться того, что вы запрашиваете, но у них есть свои недостатки (например, необходимость отлавливать исключения и сообщать об ошибках).

...