Упаковка Python: создайте файл python во время установки, выполните эту работу с помощью

Я хочу создать файл python во время установки.

Я хочу эту работу как с python setup.py develop , так и с python setup.py install и pip install . Все идет нормально.

Однако я также хочу, чтобы это работало с токсином . Здесь я испытываю проблемы.

Подход, который я использую, – это настроить команды develop и install для генерации исходного кода в файле setup.py, например:

 # make code as python 3 compatible as possible from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import setuptools import os.path import distutils.core from setuptools.command.develop import develop from setuptools.command.install import install # Build anltr files on installation # this is such a mess... it looks like there are # no common steps to develop and install class AntlrDevelopCommand(develop): def run(self): compile_grammar() develop.run(self) class AntlrInstallCommand(install): def run(self): compile_grammar() install.run(self) def compile_grammar(): here = os.path.dirname(__file__) or '.' package_dir = os.path.join(here, 'latex2sympy') subprocess.check_output(['antlr4', 'PS.g4', '-o', 'gen'], cwd=package_dir) setuptools.setup( name='latex2sympy', version=0.1, author='august.codes', author_email='augustt198@gmail.com', description='Parse latex markup into sympy: suitable for programmatic modifcation', license='GPLv3', keywords='MIT', url='', packages=['latex2sympy'], classifiers=[ ], install_requires=['antlr-ast', 'sympy'], cmdclass=dict( install=AntlrInstallCommand, develop=AntlrDevelopCommand), test_suite='nose.collector' ) 

Однако метод установки токсина, похоже, каким-то образом запускает setup.py вдали от моего исходного кода и волшебного черного ящика, который представляет собой tox заставляет его раздражаться, чтобы понять, что происходит.

Проблема, похоже, сводится к этой магии вуду, которая тянет в setup.py запускает ее через exec … по какой-то причине.

 Command "/home/tom/active/latex2sympy/.tox/py35/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-e698cucb-build/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-lu2idbzz-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/tom/active/latex2sympy/.tox/py35/include/site/python3.5/latex2sympy" failed with error code 1 in /tmp/pip-e698cucb-build/ 

Вещи, которые я пробовал:

  • Запуск с -v -v -v -v
  • Повторное выполнение команды pip вручную
  • Добавление pdb.set_trace (команда зависает, и я не вижу вывод)
  • Добавление оболочки ipython (ipython не установлен даже в install_required)
  • Запуск strace -F показывает, что setup.py действительно находится в ожидаемом местоположении относительно исходного кода

Вещи, которые я решил попробовать:

  • Создание сетевой бэкдор-оболочки во время выполнения (слишком ленив)

Python - лучший язык программирования в мире.