Ich habe eine benutzerdefinierte Python-Paket folgende this guide erstellt, so habe ich die folgende Struktur:Warum wirkt sich das aktuelle Arbeitsverzeichnis auf den Installationspfad von setup.py aus? Wie verhindere ich das?
mypackage/ <-- VCS root
mypackage/
submodule1/
submodule2/
setup.py
Und setup.py enthält genau die gleichen Informationen wie in der Führung:
from setuptools import setup, find_packages
setup(name='mypackage',
version='0.1',
description='desc',
url='vcs_url',
author='Hodossy, Szabolcs',
author_email='[email protected]',
license='MIT',
packages=find_packages(),
install_requires=[
# deps
],
zip_safe=False)
ich bemerkt haben Wenn ich in den Ordner gehe, in dem sich setup.py befindet, und dann python setup.py install
in einer virtuellen Umgebung aufrufen, wird in Site-Paketen die folgende Struktur installiert:
.../site-packages/mypackage-0.1-py3.6.egg/mypackage/
submodule1/
submodule2/
aber wenn ich es von einem Ordner auf wie python mypackage/setup.py install
nennen, dann ist die Struktur die folgenden:
.../site-packages/mypackage-0.1-py3.6.egg/mypackage/
mypackage/
submodule1/
submodule2/
dies später eine Ruine alle Einfuhren aus meinem Modul, da der Weg für die Submodule unterscheidet.
Können Sie erklären, was hier passiert und wie Sie diese Art von Verhalten verhindern können?
Dies ist mit Python 3.6 unter Windows und Linux erfahren.
Danke für die Antwort, also sollte ich nicht find_packages verwenden, da es inkonsistente Installationen meines Pakets verursachen wird. –
Ich denke, Sie sollten es verwenden, aber stellen Sie sicher, aus welchem Verzeichnis Sie Ihren Build starten. Um es anders auszudrücken: Sie könnten die Datei setup.py von einem beliebigen Verzeichnis aus ausführen und dort die Pakete erstellen, da sie keine absoluten Pfade angeben. Das ist absichtlich, weil Sie nie wissen, wie das Verzeichnis-Layout ist, wo jemand anderes es vielleicht baut. Daher werden die Pakete beginnend mit dem aktuellen Verzeichnis gesammelt. Ich denke, Sie müssen einen Unterordner mehr in der Hierarchie haben, auch wenn es so aussieht, als wäre es überflüssig. So etwas wie '' mypackage-source/mypackage/submodule1'' – allo