【问题标题】:how to write setup.py for this application structure?如何为这个应用程序结构编写 setup.py?
【发布时间】:2013-02-01 15:30:42
【问题描述】:

我用 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 文档并进行了一些测试之后。出现了几个问题:

  1. 我如何(或应该)将我的根包 (myApp) 打包到 /lib/python/site-package 下?

    因为在我的 py 文件中,我通过相对路径引用资源/图标。例如,在foo.py 中可能有icons/a.png,在gui/g1.py 中可能有../icons/e.png 等等

  2. 如何打包iconsresources目录?

    似乎package_datadata_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 将它们复制到正确的位置。

【问题讨论】:

  • 你读过pythonhosted.org/distribute/setuptools.html#developer-s-guide 吗?分发文档更详细一些。
  • @MartijnPieters 不,我还没有读过它。 thx 的链接。我正在去那里的路上。
  • @MartijnPieters 我阅读了指南。特别是非包数据文件部分 [pythonhosted.org/distribute/setuptools.html#id17] 它提到 setuptools 将在 ProjectRoot 下安装所有非包数据,不像 distutils。这就是我想要的。但它没有说如何安装......或者我错过了什么?
  • pipeasy_installzc.buildout 工具为您安装软件包;然后您使用pkg_resources 模块将您的资源加载到最终安装的任何位置。
  • @MartijnPieters,问题是iconsresources 不属于任何包。他们位于项目/应用程序根目录,(没有__init__.py

标签: python distutils setup.py


【解决方案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'])
      ]
      )

【讨论】:

  • 你的意思是path/to/icons我应该手动写例如/usr/lib/python2.7/site-packages/myApp-version-py2.7.egg/icons
  • 文件存放在任何地方。相对路径或绝对路径
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2019-07-14
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多