使用distutils使包适合zipimp

2024-10-17 02:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我将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。但当我看到拉链的内容时:

$ 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一起工作?因为我的代码是特定于应用程序的,所以它不属于安装到系统库中的代码。你知道吗

我知道我可以自己写剧本,但那有什么好玩的?例如,我想确保所有内容都是预编译的,并且我的包包含一个不打算分发的单元测试包。所以,我希望这些工具中的一个能帮我。你知道吗


Tags: 代码py应用程序fooinitlibpackagesusr
2条回答

egg存档文件支持zipimport(除非有相反的标记,在这种情况下,它们将在安装过程中被解包)。你知道吗

使用python setup.py bdist formats=egg。你知道吗

distutils的bdist格式不是设计用来生成可直接导入的zip文件,而是可以手动或通过pip等工具下载和安装的发行版。您可以使用wheels(格式化替代eggs),或者使用distutils来创建pyc文件,然后手动压缩build/mypackage目录并发送该文件。你知道吗

相关问题 更多 >