paquetes - Empaquetado Python: Genere un archivo python en el momento de la instalación, haga que este funcione con tox
instalar pip python windows (1)
En el archivo tox.ini de su proyecto, puede agregar comandos para que se ejecuten en los entornos de prueba. Un ejemplo simple se ve así:
[tox]
envlist = py27,py34,py35,py36
[testenv]
deps=
pytest
; ... other dependencies
commands=
pytest --basetemp={envtmpdir} {posargs}
; Add your command here?
¿Es posible que agregue un comando para hacer que Tox haga lo que quiera? (El comando se ejecutará para cada uno de los entornos).
Quiero generar un archivo python en el momento de la instalación.
Quiero que esto funcione con python setup.py develop
, python setup.py install
y pip install
. Hasta aquí todo bien.
Sin embargo, también quiero que esto funcione con tox . Aquí es donde estoy teniendo problemas.
El enfoque que uso es modificar los comandos de develop
e install
para generar el código fuente en setup.py de la siguiente manera:
# 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=''[email protected]'',
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''
)
Sin embargo, el método de instalación de setup.py
alejar de alguna manera setup.py
de mi código fuente y la caja negra mágica que representa tox
hace que resulte exasperante averiguar qué está pasando.
El problema parece deberse a esta magia vudú que se setup.py
en setup.py
ejecuta a través de un exec
... por alguna razón.
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/
Cosas que he intentado:
- Corriendo con -v -v -v -v
- Volver a ejecutar el comando pip manualmente
- Agregar un
pdb.set_trace
(comando cuelga y no veo salida) - Agregar un shell ipython (ipython no instalado incluso cuando está en install_required)
- Ejecutando una
strace -F
esto muestra quesetup.py
está de hecho en la ubicación esperada relativa al código fuente
Cosas que he considerado intentar:
- Crear un shell de puerta trasera de red en tiempo de ejecución (demasiado flojo)