使用distutils制作适合zipimport的包装

时间:2013-03-13 14:57:30

标签: python distutils

我在我正在创建的应用程序中嵌入python,我正在寻找一种方便的方法来分发python代码。我最近阅读了zipimport,并认为这将是一种方便的方式来分发我的所有python代码,而不是包括完全展开的树。所以,我设置我的包类似于:

.
├── setup.py
└── testpack
    ├── __init__.py
    └── pack1
        ├── foo.py
        └── __init__.py

setup.py的样子:

from distutils.core import setup

setup(
    name='testpack',
    author='FatalError',
    version='1.0',
    packages=['testpack.pack1']
)

然后我跑了python setup.py bdist --format=zip。但是当我看到zip的内容时:

$ unzip -l testpack-1.0.linux-x86_64.zip 
Archive:  testpack-1.0.linux-x86_64.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
      183  2013-03-13 10:47   usr/local/lib/python2.7/dist-packages/testpack-1.0.egg-info
      152  2013-03-13 10:47   usr/local/lib/python2.7/dist-packages/testpack/pack1/__init__.pyc
      181  2013-03-13 10:47   usr/local/lib/python2.7/dist-packages/testpack/pack1/foo.pyc
        0  2013-03-13 10:41   usr/local/lib/python2.7/dist-packages/testpack/pack1/__init__.py
       33  2013-03-13 10:41   usr/local/lib/python2.7/dist-packages/testpack/pack1/foo.py
---------                     -------
      549                     5 files

显然,结果(不是那么令人惊讶)不适合与zipimport一起使用。相反,这是一个zip存档,意图在/解压缩以安装软件包。

有没有办法让distutils(或setuptools等)代替构建包,以便它可以与zipimport一起使用?由于我的代码实际上是特定于应用程序的,因此它不属于系统库。

我意识到我可以自己编写脚本,但是,那么有趣的是什么?例如,我想确保所有内容都是预编译的,并且我的包中包含一个不打算分发的单元测试包。所以,我希望其中一个工具可以帮我。

2 个答案:

答案 0 :(得分:1)

egg档案具有zipimport功能(除非标记为相反,在这种情况下,它们将在安装过程中解压缩。)

使用python setup.py bdist --formats=egg

答案 1 :(得分:0)

distutils'bdist格式不是为了直接生成可导入的zip文件而设计的,而是可以手动下载和安装的分发版或者像pip这样的工具。您可以使用轮子(格式取代鸡蛋),或使用distutils来创建pyc文件,然后手动压缩build / mypackage目录并运送它。