Ich möchte eine Python-Datei zur Installationszeit erzeugen.Python-Verpackung: Generiere eine Python-Datei zur Installationszeit, lass das mit Tox arbeiten
Ich möchte diese Arbeit mit beiden python setup.py develop
, python setup.py install
und pip install
. So weit, ist es gut.
Allerdings möchte ich auch dies mit tox arbeiten. Hier habe ich Probleme.
Der Ansatz, den ich verwende, ist die develop
und install
Befehle zwicken Quellcode in setup.py zu erzeugen, etwa so:
# 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'
)
jedoch tox
‚s Methode der Installation scheint irgendwie setup.py
wegzulaufen von meiner Quelle Code und die magische Blackbox, die tox
darstellt, macht es irgendwie ärgerlich, um herauszufinden, was los ist.
Das Problem scheint zu diesem Voodoo Magie, die in setup.py
zieht es über eine exec
.... aus irgendeinem Grund.
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/
Dinge, die ich habe versucht:
- Laufen mit -v -v -v -v
- Reruning den Pip-Befehl manuell
- ein
pdb.set_trace
(Befehl hängt Hinzufügen und ich Ausgabe nicht sehen) - Hinzufügen einer ipython-Shell (ipython no installiert, selbst wenn in install_required)
- ein
strace -F
Lauf dies zeigt, dasssetup.py
ist in der Tat in dem erwarteten Position in Bezug auf den Quellcode
Dinge, die ich habe versucht, in Betracht gezogen:
- ein Netzwerk Backdoor-Shell zur Laufzeit erstellen (zu faul)
Sieht aus wie tox Legacy-Interpreter-Unterstützung zu behandeln PEP 263 definiert ('tokenize.open' implizit ruft' detect_encoding') und ändert MS Zeilenumbrüche zu * nix Zeilenumbrüche. Ich würde sagen, das ist ein Problem zwischen Pip (ich nehme an, dass es das ist, was die 'pip - * - build' dirs), die an tox ausgibt? – cowbert
Ich stelle mir vor, Sie möchten tox für das Testen verwenden, also wäre es ein Problem, 'usedevelop = True' in der tox.ini-Datei anzugeben? Dies ist eher eine Problemumgehung, aber es kann für Ihren Anwendungsfall ausreichen. – bow