2016-07-19 19 views
0

Ich habe ein Python-Projekt, das ich verteilen möchte. Ich lese mehrere Tutorials zum Schreiben meiner setup.py-Datei und zum Installieren des produzierten Rads: sample project example, setup.py tutorial, wheel doc, wheel install oder wheel install.Falscher Ordner nach der Installation eines Rades mit Python

Die Struktur meines Projektes ist:

project_name 
    |_ lib 
     |_ project_folder 
     |_ py modules 
    |_ test 
    |_ setup.py 
    |_README.rst 

Ich baue mein Rad wie diese python setup.py bdist_wheel und dann nehme ich das produzierte Rad in einen anderen Ordner außerhalb meines Projekts und tun pip install my_wheel. Ich habe auch versucht pip install --no-index --find-links=my_wheel project_name

Das Problem, das ist, wenn ich meinen Python site-packages Ordner schauen, anstatt auf:

python folders 
project_name 
project_name-2.0.0.dist-info 

die project_name Ordner in lib gebrochen und Test:

python folders 
lib 
project_name-2.0.0.dist-info 
test 

I verstehe nicht, warum meine project_name nicht wie die anderen Python-Ordner gruppiert ist. Kann mir jemand helfen, besser zu verstehen?

setup.py:

from setuptools import setup, find_packages 
from codecs import open 
from os import path 

root_folder = path.abspath(path.dirname(__file__)) 

with open(path.join(root_folder, "README.rst"), encoding="utf-8") as f: 
    long_description = f.read() 

setup(
    name = "project", 
    version = "2.0.0", 

    description = "My project is cool", 
    long_description = long_description,  

    packages = find_packages(), 

    include_package_data = True 
) 
+0

Haben Ihre "lib" - und "test" -Verzeichnisse zufällig "__init __. Py" -Dateien? –

+0

Ja haben sie. Sie können es nicht haben? – user3314570

+0

Nein, weil sie keine Pakete sind. 'find_packages()' verwendet '__init __. py' Dateien, um zu erkennen, was ein Paket ist. –

Antwort

0

find_packages() bestimmt Pakete durch die __init__.py Dateien. Es sieht aus wie Ihre lib und tests Verzeichnisse haben __init__.py Dateien in ihnen.

Weder Ihre lib noch tests Verzeichnisse sind Pakete, entfernen Sie die __init__.py Dateien von denen. Auf diese Weise wird find_packages() nur project_folder() in die resultierende Verteilung (Quelle, Binär oder Rad) enthalten.

+0

Ich testete so (übrigens hatten Sie Recht 'lib' und' Tests' sollten keine Pakete sein), aber ich habe immer noch nicht meinen 'project_folder' als Ordner, nur den' project_folder-2.0.0.dist -info'. Ich sehe nicht warum, weil ich die Nachricht 'installiere gesammelte Pakete project_folder' habe, also dachte ich, dass ich meinen Ordner sehen würde – user3314570

+0

@ user3314570: Wurde der Rad-Cache verwendet? Ich würde zuerst einen 'sdist'-Tarball erstellen und inspizieren, was darin steckt, * dann * versuche, es als Rad zu installieren (stelle sicher, dass du das alte deinstallierst und kein gecachtes Rad benutzt wird). –

+0

Ich bin neu in dieser Methode, also weiß ich nicht, was ist der Radcache und wie man damit umgeht. Ich habe zuerst einen sdist gemacht, bevor ich ein Rad mit 'python setup.py sdist' wollte. Im Inneren habe ich meinen 'project_folder' mit seinen Lib- und Testordnern, wie ich es wünsche. – user3314570