2016-09-03 3 views
1

Ich möchte meine Anwendung packen, um sie zwischen mehreren Projekten zu teilen. Mein setup.py wie folgt aussieht:Kann mein eigenes Modul, das mit distutils verteilt wird, nicht importieren

# -*- coding: utf-8 -*- 
from distutils.core import setup 

setup(
    name='foo_bar', 
    version='1.0', 
    py_modules=['foo_bar'], 
    install_requires=[ 
     'bitstring==3.1.5', 
     'pytz==2016.4', 
     'wheel==0.24.0', ] 
) 

Dann laufe ich Befehl

python setup.py sdist 

die

für mich tar.gz-Datei erstellt Ich habe Probleme mit meinem foo_bar Anwendung. Ich bin es in separate virtualenv über pip Installation

pip install dist/foo_bar.tar.gz 

und Ausgabe von pip freeze legt nahe, dass es

installiert ist
foo-bar==1.0 
bitstring==3.1.5 
pytz==2016.4 
wheel==0.24.0 

Wenn ich versuche, dieses Modul in Python Konsole zu importieren

import foo_bar 

Ich bekomme ImportError: No module named 'foo_bar'

Was ich vermisse?

Edit:

Meine Dateistruktur sieht wie folgt aus:

foo_bar 
├── dist 
│   └── foo_bar-1.0.tar.gz 
├── __init__.py 
├── MANIFEST 
├── bar.py 
├── requirements.txt 
├── setup.py 
+0

Haben Sie auch versucht '' python setup.py install''? Können Sie Ihre Verzeichnisstruktur angeben? Sind Sie in der gleichen Virtualität, wenn Sie versuchen, Ihr Modul zu importieren? Warum benutzt du '' py_modules'' und nicht '' packages''? Es ist viel flexibler ... – ziky

+0

@ziky Ich habe meinen Beitrag aktualisiert, um die Verzeichnisstruktur einzuschließen. Ich benutze separate virtualenv, habe aber foo_bar dort installiert. TBH, ich habe noch nicht von 'Pakete' Option gehört, könnte es anstelle von py_module einen Unterschied machen? – mateuszb

+1

Sie versuchen, '' foo_bar'' zu importieren, jedoch gibt es kein '' foo_bar.py'' in Ihrem Paket! Versuchen Sie, '' bar.py'' in diesen Namen umzubenennen. Allerdings habe ich nie Pakete auf diese Weise verwendet. Normalerweise erstellen Sie ein Paket (Verzeichnis mit '' __init __. Py'' Datei) auf der gleichen Ebene wie '' setup.py'' ist. Das heißt, dass Sie in Ihrem Projekt ein weiteres '' foo_bar''-Verzeichnis erstellen würden und dort würden Sie '' bar.py'' platzieren. Dann würden Sie es importieren wie '' Import foo_bar.bar''. – ziky

Antwort

1

Könnten Sie Ihre Verzeichnisstruktur zur Verfügung stellen? Sind Sie in der gleichen Virtualität, wenn Sie versuchen, Ihr Modul zu importieren? Warum verwenden Sie py_modules und nicht packages?

Außerdem versuchen Sie, foo_bar zu importieren, jedoch gibt es keine foo_bar.py in Ihrem Paket! Versuchen Sie, bar.py auf diesen Namen umzubenennen.

Hinweis: Ich habe nie Pakete auf diese Weise verwendet. Normalerweise erstellen Sie ein Paket (Verzeichnis mit __init__.py Datei) auf der gleichen Ebene wie setup.py ist. Das bedeutet, dass Sie in Ihrem Projekt ein weiteres foo_bar Verzeichnis erstellen würden und Sie dort bar.py platzieren würden. Dann würden Sie es wie import foo_bar.bar importieren.

Verwandte Themen