setup script schreiben

Probleme bei der Installation?
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

habe gerade Probleme ein setup-Skript für mein Modul aufzusetzen.

Folgende Verzeinisstruktur:

Code: Alles auswählen

MANIFEST
README
INSTALL -- alles Textdateien
setup.py
src/
    __init__.py
    mc_rigid.py 
    pofr.pyx
bisher geschriebenes setup.Skript (== setup.py)

Code: Alles auswählen

import sys
from distutils.core import setup
from distutils.extension import Extension
try:
    from Pyrex.Distutils import build_ext
except ImportError:
    __info__ = """
    Please install Pyrex
    (http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/)
    before running this setup script.
    """
    sys.exit(__info__)

setup(
    name = "mc_rigid",
    # snip
    packages = ['mc_rigid'],
    package_dir={'mc_rigid': 'src/'},
    package_data = {'mc_rigid': ['README', 'INSTALL']},
    ext_package='pofr',
    ext_modules = [
        Extension("pofr", ["src/pofr.pyx"])
        ],
    cmdclass = {'build_ext' : build_ext}
)
Wenn ich nun eingebe sudo python setup.py install läuft zwar das Skript ohne Warnungen, aber
  • * es wird eine Datei /usr/lib/python2.5/site-packages/mc_rigid/mc_rigid.py angelegt. Das führt dazu, daß ich nur

    Code: Alles auswählen

    import mc_rigid.mc_rigid
    und nicht einfach

    Code: Alles auswählen

    import mc_rigid
    machen kann.
    * Es wird eine Datei pofr.so in /usr/lib/python2.5/site-packages angelegt, aber ich hätte sie gerne in /usr/lib/python2.5/site-packages/mc_rigid.
Ich erinnere mich dunkel so ein Problem schon gehabt zu haben, weiß jetzt aber irgendwie nicht ein, nicht aus. Kann mir jemand meinen Fehler zeigen?

Danke,
Christian
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Vielleicht musst du bei `package_dir` einen leeren String als Key verwenden.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Danke, aber das kann es auch nicht sein:

Code: Alles auswählen

sudo python setup.py install
running install
running build
running build_py
error: package directory 'src/mc_rigid' does not exist
Christian
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Und wenn du das nur/auch bei `packages` versuchst? Probier mal einige Sachen durch und/oder lies dir direkt nochmal die Setuptools-Docs aufmerksam durch. Du bist aber nicht der einzige, der seine Setup-Scripts teilweise nach Trial'n'Error erstellt ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Nun ja, isch 'abe die Docs durschgelesen ;-). Leider bin ich so nischt vorangekommen. Deshalb frage ich hier.

Aber im Ernst: Natürlich habe ich schon einige Dinge durchprobiert. Nur leider habe ich den goldenen Weg nicht gefunden. Und so hoffe ich jemand hier hat irgendein Beispiel. (Ich wäre ja auch bereit meine Verzeichnisstruktur entsprechend anzupassen.)
Außerdem sehe ich in diesen Spielereien noch keine Möglichkeit das Extensionmodul in site-packages/mc_rigid zu packen. Weiß jemand wie man das denn hinbekommt? Das Extensionmodul ist nämlich nur in Zusammenhang mit dem Hauptmodul zu gebrauchen, soll also gar nicht allgemein verfügbar sein. Vielleicht gibt es auch dabei eine geschicktere Verzeichnisstruktur?

Aber vielleicht hast Du doch recht, Yogi: Ich gehe erst mal ins WE und vielleicht kommt mir dann ja die Erleuchtung.

Gruß,
Christian
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In ``__init__.py``: ``from mc_rigid.mc_rigid import *``?
Für eine Lösung ohne Sternchenimporte macht man ``mv -f mc_rigid.py __init__.py`` ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Na ja, das mit dem Import in __init__.py ist sicher auch eine Lösung, allerdings haben die Pakete dann kein Standardverhalten mehr, da 'from mc_rigid import x' nicht nur 'x' im Namensraum haben würde, sondern auch "sich selbst".

Den zweiten Teil meines Problems habe ich gelöst indem 'ext_modules' gleich dem Names des Paketes gesetzt wird:

Code: Alles auswählen

setup(
    name = "mc_rigid",
    #snip
    packages = ['mc_rigid'],
    package_dir={'mc_rigid': 'src/'},
    package_data = {'mc_rigid': ['README', 'INSTALL']},
    ext_package='mc_rigid',
    ext_modules = [
        Extension("pofr", ["src/pofr.pyx"])
        ],
    cmdclass = {'build_ext' : build_ext}
)
Den Rest gedenke ich durch kreatives Umbenennen zu lösen, dann wird für einen pot. Nutzer klarer was Paket und was Modul ist.

Dennoch vielen Dank euch beiden!
Christian
Antworten