2

我正在将 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?由于我拥有的代码确实是特定于应用程序的,因此它不属于安装到系统库中。

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

4

2 回答 2

1

egg档案支持 zipimport(除非有相反的标记,在这种情况下,它们将在安装过程中被解压)。

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

于 2013-03-13T15:03:11.440 回答
0

distutils 的 bdist 格式并非旨在生成可直接导入的 zip 文件,而是可以手动或通过 pip 等工具下载和安装的发行版。您可以使用轮子(格式取代鸡蛋),或使用 distutils 创建 pyc 文件,然后手动压缩 build/mypackage 目录并发布它。

于 2014-04-24T21:24:20.017 回答