Python-Verpackungen: Daten-Dateien richtig in tar.gz die Datei ist aber nicht installiert virtueller Umgebung
Kann ich nicht richtig installieren, das Projekt package_fiddler
zu meiner virtuellen Umgebung.
Habe ich herausgefunden, dass MANIFEST.in
ist verantwortlich für die Umsetzung des non-.py Dateien in Package_fiddler-0.0.0.tar.gz
, der erzeugt wird, wenn ausgeführt python setup.py sdist
.
Dann habe ich:
(virt_envir)$ pip install dist/Package_fiddler-0.0.0.tar.gz
Dazu kam es aber nicht installieren Sie die Daten-Dateien noch das Paket /home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages
.
Ich habe versucht, viele Konfigurationen des setup-Argumente package_data
, include_package_data
und data_files
aber ich habe wohl das falsche Konfiguration jedes mal.
Die Konfiguration von package_data
- und/oder include_package_data
- und/oder data_files
richtig installieren package_fiddler
zu meiner virtuellen Umgebung?
Projekt Baum
.
├── MANIFEST.in
├── package_fiddler
│ ├── data
│ │ ├── example.html
│ │ └── stylesheets
│ │ └── example.css
│ └── __init__.py
├── README.rst
└── setup.py
setup.py
from setuptools import setup
setup(
name='Package_fiddler',
entry_points={
'console_scripts': ['package_fiddler = package_fiddler:main', ],},
long_description=open('README.rst').read(),
packages=['package_fiddler',])
MANIFESTIEREN.in
include README.rst
recursive-include package_fiddler/data *
Die Konfigurationen von setup.py(mit der code-Basis oben) habe ich versucht?
Configuration1
Hinzufügen:
package_data={"": ['package_fiddler/data/*',]}
Configuration2
Hinzufügen:
package_data={"": ['*.html', '*.css', '*.rst']}
Configuration3
Hinzufügen:
include_package_data=True
Configuration4
Hinzufügen:
package_data={"": ['package_fiddler/data',]}
Entfernen:
packages=['package_fiddler',]
Configuration5 (Chris ' Vorschlag)
Hinzufügen:
package_data={"data": ['package_fiddler/data',]}
Entfernen:
packages=['package_fiddler',]
Konfiguration 6
Hinzufügen:
package_data={"": ['package_fiddler/data/*',]}
Entfernen:
packages=['package_fiddler',]
Diese Konfigurationen führen keine Dateien installiert wird, auf /home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages
.
BEARBEITEN
Hinweis zu Toshio Kuratomi:
In meinem ursprünglichen Beitrag habe ich verwendet die einfachste Struktur, wo dieses problem tritt auf, für Klarheit in der Realität aber mein Baum sieht eher aus wie der Baum unten. Für diesen Baum, seltsam, wenn ich nur eine __init__.py
im stylesheets
irgendwie alle Daten-Dateien in der texts
Ordner auch richtig installiert!!! Dies verwirrt mich.
Baum 2 (Dies installiert alle Dateien richtig irgendwie!!)
.
├── MANIFEST.in
├── package_fiddler
│ │── stylesheets
| | ├── __init__.py
| | ├── example.css
| | └── other
| | └── example2.css
| |__ texts
| | ├── example.txt
| | └── other
| | └── example2.txt
│ └── __init__.py
├── README.rst
└── setup.py
InformationsquelleAutor Bentley4 | 2012-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mir persönlich gefällt die Art und Weise setuptools mischt code und Daten sowohl konzeptionell und von der Umsetzung her. Ich denke, dass es ist, dass die Umsetzung, die stolpern, die Sie bis hier. Für setuptools zu finden und zu verwenden package_data, die es braucht, damit die Daten befinden sich innerhalb eines python-Paket. Ein python-Paket kann ein Verzeichnis sein, aber es muss ein
__init__.py
- Datei in das Verzeichnis. So wie es aussieht, benötigen Sie die folgenden (leeren ist in Ordnung) Dateien:Ich bin damit einverstanden. Etwas seltsam ist, dass nur eine
__init__.py
Datei in den verschachtelten Daten-Dateien wurde benötigt, um richtig installieren Sie das Projekt mittree2
im edit Teil von meinem post!!!__init__.py
ist für die Herstellung von einem Verzeichnis importiert werden kann als ein Modul -- das sollte nicht notwendig sein, für die Daten-Verzeichnisse. Siehe meine Antwort.Ja, die
__init__.py
ist schrecklich, aberpackage_data
ist eindistutils
Funktion, diesetuptools
ignoriert. Darüber hinauspackage_data
funktioniert nicht, wenn der Versandsdists
. Im Allgemeinen, Verpackung in python ist schrecklich; es bevorzugen hacky__init__.py
Lösung über die inkonsistentepackage_data
Lösung, bitte lassen Sie Sie.InformationsquelleAutor Toshio Kuratomi
Fand eine Lösung, die für mich gearbeitet hier.
Mit
setuptools==2.0.2
ich habe:__init__.py
hack.Großen Dank dafür!!!!
dies funktioniert für mich, ich halte, zu vergessen, über und über ...
Dies ist in der Tat die richtige Antwort, das löste alle meine Probleme. Die
__init__.py
hack hat nicht funktioniert für mich, weil ich bereits platziert init-Dateien überall in meinem Baum! Und darüber hinaus die init-trick nicht helfen, für nicht-python-Dateien.InformationsquelleAutor warvariuc
Die einfachste Möglichkeit um Paket-Daten "setup.py" ist etwa so:
Also in deinem Beispiel:
package_data
ist ein Wörterbuch, wo die Schlüssel sind die Namen der Pakete im installer enthalten. Die Werte unter diesen Schlüsseln werden sollten Listen der spezifischen Datei-Pfade oder Einheiten/Platzhalter innerhalb der package-Verzeichnis.Außerdem müssen Sie die Flagge:
in
setup(...)
wenn Sie wollen in der Lage sein zu beheben Dateisystem-Pfade zu Ihren Daten. Ansonsten können Siepkg_resources
um dies zu tun: http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resourcesSie definitiv nicht brauchen eine
__init__.py
- Datei in den "data" - Verzeichnis - das Verzeichnis ist nicht ein Modul und soll nicht importiert werden.MANIFEST.in
undsetup.py
und synchron zu halten.Diese, diese, diese! Es ist das Schlimmste von allem, dass die docs machen einen glauben, dass MANIFEST.in NICHT gebraucht, dabei habe ich noch nicht gefunden, einen Weg, um es ohne arbeiten. 🙁
InformationsquelleAutor Leo
Dies funktioniert für mich. Hoffe, es hilft.
InformationsquelleAutor Andres Ulloa
verwenden
statt
Haben Sie
from setuptools import setup
oderfrom distutils.core import setup
in Ihremsetup.py
?InformationsquelleAutor Chris