6

Python (2.7) でアプリケーションを作成しました。構造は次のようになります。

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

setup.py今、私は自分のアプリケーションを配布するために を書こうとしています。私はこれが初めてです。py doc を読み、いくつかのテストを行った後。いくつかの質問が出てきます:

  1. ルートパッケージ (myApp) を以下にパッケージ化するにはどうすればよいですか (またはパッケージ化する必要があり/lib/python/site-packageますか? )

    私のpyファイルでは、リソース/アイコンを相対パスで参照しているためです。たとえば、foo.pyそこにある可能性がicons/a.pngあり、gui/g1.pyそこにある可能性がある../icons/e.pngなど

  2. iconsパッケージ化してresourcesディレクトリを作成するにはどうすればよいですか?

    2つのディレクトリを正しい場所にコピーしないpackage_dataようです。data_files

  3. これは正しい方法ですか?

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

    インストール後、私のファイルは次のようになります。

    /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. アプリケーションの構造に問題がありますか?

    これらのリソース/アイコン/ファイルは、プロジェクトルートの下ではなく、特定の python パッケージに移動する必要がありますか? setup.py で、package_dataそれらを正しい場所にコピーするために使用できるようにします。

4

1 に答える 1

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="bar@gmail.com",
      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'])
      ]
      )
于 2013-02-17T21:23:17.580 に答える