Wir haben ein Python 2-Modul, das wir mit python setup.py sdist
erstellen, dann auf einem Remote-Computer bereitstellen und in einem virtualenv mit pip install mymodule.tar.gz
installieren.AttributError: 'Modul' Objekt hat kein Attribut '__file__'
Das Problem ist: auf einer Maschine das resultierende Modul kennt seine eigene Filepath __file__
, und auf einer anderen Maschine ist es nicht. Der Testfall ist dies:
python -c "import mymodule; print(mymodule.__file__)"
Auf einer Maschine druckt es richtig den vollständigen Pfad zu einer Stelle innerhalb des virtualenv „site-packages“. Bei einer anderen sehr ähnlichen Maschine hebt es:
AttributeError: 'module' object has no attribute '__file__'
(Die betreffenden Maschinen sind AWS EC2 Knoten mit Ubuntu 14.04.)
Das Problem gesehen wurde, als einen Weg mit pkg_resources zu lösen versuchen, indem doing python -c "import pkg_resources; print(pkg_resources.resource_filename('mymodule', 'migrations'))"
- dies sollte den vollständigen Pfad zum Modul-Code geben, aber nicht auf dem problematischen Rechner ordnungsgemäß gelöst werden.
Ich kann keine Unterschiede in der Shell-Umgebung, die Menge der von pip installierten Pakete oder das Dateisystem für "mymodule" sehen, nachdem es von pip installiert wurde. Ich habe cd
Ed in einen leeren Ordner, um sicherzustellen, dass ich nichts von cwd importieren.
Welche Unterschiede kann ich untersuchen, um dieses Problem zu verfolgen? Wie kann ich sicherstellen, dass mein pip install
ein Paket installiert, das seinen Dateipfad kennt?