【发布时间】: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 文档并进行了一些测试之后。出现了几个问题:
-
我如何(或应该)将我的根包 (myApp) 打包到
/lib/python/site-package下?因为在我的 py 文件中,我通过相对路径引用资源/图标。例如,在
foo.py中可能有icons/a.png,在gui/g1.py中可能有../icons/e.png等等 -
如何打包
icons和resources目录?似乎
package_data和data_files不会将这两个目录复制到正确的位置。 -
这是正确的方法吗?
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/... -
我的应用程序结构有问题吗?
这些资源/图标/任何文件是否应该放在某个 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。这就是我想要的。但它没有说如何安装......或者我错过了什么?
-
pip、easy_install或zc.buildout工具为您安装软件包;然后您使用pkg_resources模块将您的资源加载到最终安装的任何位置。 -
@MartijnPieters,问题是
icons和resources不属于任何包。他们位于项目/应用程序根目录,(没有__init__.py)