2013-02-16 4 views
6

Ich habe eine Anwendung mit Python (2.7) geschrieben. Die Struktur sieht so aus:Wie schreibe ich setup.py für diese Anwendungsstruktur?

kent$ tree myApp 
myApp 
|-- foo.py 
|-- gui 
| |-- g1.py 
| |-- g2.py 
| |-- g3.py 
| `-- __init__.py 
|-- icons 
| |-- a.png 
| `-- e.png 
|-- logic 
| |-- __init__.py 
| |-- l1 
| | |-- __init__.py 
| | |-- la.py 
| | `-- lc.py 
| |-- l2 
| | |-- __init__.py 
| | |-- ld.py 
| | `-- lf.py 
| |-- logic1.py 
| |-- logic2.py 
| `-- logic3.py 
|-- myApp.py 
`-- resources 
    |-- x.data 
    `-- z.data 

Jetzt ich bin ein schreiben setup.py meine Anwendung zu verteilen. Ich bin neu in diesem Bereich. Nach dem Lesen des py doc und einigen Tests. ein paar Fragen kommen:

  1. wie kann ich (oder sollte ich) unter /lib/python/site-package mein Root-Paket (myApp) verpacken?

    da ich in meiner py-Datei Ressourcen/Symbole nach relativem Pfad referenziere. zum Beispiel in foo.py könnte es icons/a.png und in gui/g1.py da seine ../icons/e.png und so weiter

  2. , wie ich icons und resources Verzeichnis verpacken kann sein könnte?

    Es scheint, dass und data_files die beiden Verzeichnisse nicht an die richtige Stelle kopieren.

  3. ist dies der richtige Weg?

    packages = [''], 
    package_dir = {'': ''}, 
    package_data= {'': ['icons/*.*', 'resources/*.*']}, 
    

    nach der Installation, werden meine Dateien sein:

    /usr/lib/python2.7/site-packages/icons/*.png 
    /usr/lib/python2.7/site-packages/resources/*.data 
    /usr/lib/python2.7/site-packages/gui/... 
    /usr/lib/python2.7/site-packages/logic/... 
    
  4. Gibt es Problem meiner Anwendungsstruktur?

    sollten diese Ressourcen/Symbole/welche Dateien zu bestimmten Python-Paket, nicht unter dem Projektstamm gehen? Damit kann ich in setup.py package_data verwenden, um sie an den richtigen Ort zu kopieren.

+1

Haben Sie http://pythonhosted.org/distribute/setuptools.html#developer-s-guide lesen? Die Distributions-Dokumentation ist etwas detaillierter. –

+0

@MartijnPieters nein, ich habe es nicht gelesen. Danke für die Verbindung. Ich bin auf dem Weg dorthin. – Kent

+0

@MartijnPieters Ich habe den Leitfaden gelesen. vor allem der Abschnitt Non-Package DataFiles [http://pythonhosted.org/distribute/setuptools.html#id17] erwähnt, dass setuptools alle nicht-package-Daten unter ProjectRoot installiert, nicht wie distutils. das möchte ich haben. Aber es hat nicht gesagt, wie man es installiert ... oder ich habe etwas verpasst? – Kent

Antwort

1
from ez_setup import use_setuptools 
use_setuptools() 
from setuptools import setup 

setup(name="somename", 
     version="1.0", 
     description="description string", 
     long_description="""\ 
long description 
""", 
     author="Foo", 
     author_email="[email protected]", 
     url="http://nowhere.com", 
     include_package_data=True, 
     license="MIT", 
     packages=["gui", "logic"], 
     package_dir={ 
      "gui": "myApp/gui", 
      "logic": "myApp/logic", 
      }, 
     classifiers=[ 
     "Development Status :: 5 - Production/Stable", 
     "Topic :: Utilities", 
     "License :: OSI Approved :: MIT License" 
     ], 
     data_files=[ 
      ('/path/to/resources', ['resources/x.data', 'resources/y.data']), 
      ('/path/to/icons', ['myApp/icons/a.ico', 'myApp/icons/e.ico']) 
     ] 
    ) 
+0

du meinst den 'pfad/zu/symbols' den ich manuell schreiben sollte zum beispiel'/usr/lib/python2.7/site-packages/myApp-version-py2.7.egg/icons'? – Kent

+0

Es ist überall dort, wo Sie Ihre Dateien haben. entweder relative oder absolute Pfade –