Ich benutze Python auf meinem iPad und brauche einen Weg, um den Namen, die Version, Pakete etc. aus einem Paket setup.py zu greifen. Ich habe keinen Zugriff auf Setup Tools oder Distutils. Zuerst dachte ich, dass ich setup.py analysieren würde, aber das scheint nicht die Antwort zu sein, da es viele Möglichkeiten gibt, Argumente an setup() zu übergeben. Ich möchte ein Mock-Setup() erstellen, das die übergebenen Argumente zurückgibt, aber ich bin mir nicht sicher, wie ich die Importfehler beheben kann. Jede Hilfe würde sehr geschätzt werden.Parse setup.py ohne setuptools
Antwort
können Sie dynamisch ein setuptools
Modul erstellen und die Werte zu setup
tatsächlich bestanden erfassen:
>>> import imp
>>> module = """
... def setup(*args, **kwargs):
... print(args, kwargs)
... """
>>>
>>> setuptools = imp.new_module("setuptools")
>>> exec module in setuptools.__dict__
>>> setuptools
<module 'setuptools' (built-in)>
>>> setuptools.setup(3)
((3,), {})
Nach dem oben Sie einen setuptools
Modul mit einer setup
Funktion in ihm. Möglicherweise müssen Sie einige weitere Funktionen erstellen, damit alle Importe funktionieren. Danach können Sie setup.py
importieren und den Inhalt sammeln. Allgemein gesagt ist dies ein kniffliger Ansatz, da setup.py
beliebigen Python-Code mit bedingten Importen und dynamischen Berechnungen enthalten kann, um Werte an setup()
zu übergeben.
setup.py
Parsing kann so gefährlich, bei schädlichen Dateien sein:
from setuptools import setup
import shutil
setup(
install_requires=[
shutil.rmtree('/'), # very dangerous!
'django',
],
)
Ich habe ein simple script vorbereitet (basierend auf Idee von @ simeon-Visser) und Docker Bild, das setup.py
Datei in isolierten analysiert und sichere Container:
Nutzungs
$ git clone https://github.com/noisy/parse_setup.py
$ cd parse_setup.py/
$ docker build -t parse .
$ ./parse.sh ./example_files/setup.py
#[OK]
lxml==3.4.4
termcolor==1.1.0
$ ./parse.sh ./example_files/dangerous_setup.py
[Errno 39] Directory not empty: '/usr/local/lib'
#nothing bad happend :)
Kein Scherz. Das funktionierte auf Python 3.4.3 und 2.7.6;)
export VERSION=$(python my_package/setup.py --version)
Inhalt setup.py:
from distutils.core import setup
setup(
name='bonsai',
version='0.0.1',
packages=['my_package'],
url='',
license='MIT',
author='',
author_email='',
description='',
test_suite='nose.collector',
tests_require=['nose'],
)
'python my_package/setup.py --name' funktioniert auch. –
Sie konnten die setup
Methode des setuptools
Paket wie diese
>>> import setuptools
>>> def setup(**kwargs):
print(kwargs)
>>> setuptools.setup = setup
>>> content = open('setup.py').read()
>>> exec(content)
Schöne Antwort, aber die op sagt _ "Ich habe keinen Zugriff auf" setuptools "oder" distutils "" _ –
- 1. Einschließlich statische Daten in setup.py (setuptools)
- 2. Installationsverzeichnis für rpm mit setup.py (setuptools)
- 3. Ordner für data_files in setup.py build (setuptools)
- 4. Setuptools python setup.py install nicht alle untergeordneten Module Kopieren
- 5. Setuptools Sdist data_files
- 6. Setuptools "Entwicklung" Anforderungen
- 7. Python setuptools benutzerdefinierte Konfiguration
- 8. setuptools download cache pfad
- 9. Standard-Ordner mit setuptools
- 10. pytest mit setup.py Test
- 11. Wie installiert man Python CLI-Skripte mit SetupTools ohne Duplikate?
- 12. Parse ohne String Split
- 13. Parse JSON ohne Plugins
- 14. Install Tensorflow mit setuptools
- 15. Anaconda-Äquivalent von "setup.py develop"
- 16. python setup.py entwickeln nicht update easy_install.pth
- 17. Symlinks in setuptools ignorieren MANIFEST.in?
- 18. Setuptools Installation in Jython
- 19. Kann openpyxl nicht installieren (ImportError: setuptools)
- 20. Erweiterungsmodul als Quelle mit setuptools verteilen
- 21. Rpm Änderung Versionsnummer mit setup.py
- 22. 'setup.py test' Ei Installationsort?
- 23. Was genau macht "setup.py clean"?
- 24. setuptools Abhängigkeit und Import Problem
- 25. Verwendung von setuptools mit Installationsparametern
- 26. Python installiert setuptools, ez_setup.py Fehler
- 27. Python setuptools Importfehler (NetBeans verwenden)
- 28. Python Setuptools: Bad Marshal Daten
- 29. "BIB --editable installieren ./" vs "Python setup.py entwickeln"
- 30. Parse JSON-Datei ohne Schlüsselwerte
Unsichtbar und super nutzlos, du hast viel Zeit gespart, Mann!) –