Je veux générer un fichier python au moment de l'installation.Emballage Python: Générer un fichier python au moment de l'installation, avoir ce travail avec tox
Je veux ce travail avec les deux python setup.py develop
, python setup.py install
et pip install
. Jusqu'ici tout va bien.
Cependant, je veux aussi que cela fonctionne avec tox. C'est là que j'ai des problèmes.
L'approche que je l'aide est de modifier les commandes develop
et install
pour générer le code source dans setup.py comme ceci:
# 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'
)
Cependant la méthode de tox
d'installation semble fonctionner en quelque sorte setup.py
loin de ma source code et la boîte noire magique que tox
représente rend un peu exaspérant pour comprendre ce qui se passe.
Le problème semble être dû à cette magie vaudou qui tire dans setup.py
l'exécute via un exec
.... pour une raison quelconque.
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/
choses que j'ai essayé:
- Courir avec -v -v -v -v
- Reruning la commande pip manuellement
- Ajout d'un
pdb.set_trace
(commande se bloque et je ne pas voir la sortie) - Ajout d'un shell ipython (ipython non installé même dans install_required)
- Exécution d'un
strace -F
cela montre quesetup.py
est en effet à l'emplacement prévu par rapport au code source
choses que j'ai envisagé d'essayer:
- Création d'un shell de porte dérobée réseau au moment de l'exécution (trop paresseux)
Apparemment, la prise en charge de l'interpréteur hérité tox pour gérer PEP 263 définit ('tokenize.open' appelle implicitement' detect_encoding') et modifie les lignes de nouvelles MS en newix * nix. Je dirais que c'est un problème entre pip (je suppose que c'est ce qui est en train de changer les dirs de '' pip - * - build' ') en passant à tox? – cowbert
J'imagine que vous voulez utiliser des tests pour tester, donc est-ce que ce serait un problème de spécifier 'usedevelop = True' dans le fichier tox.ini? C'est plus une solution de contournement, mais cela peut suffire pour votre cas d'utilisation. – bow