【问题标题】:How to force setup.py to unpack module files?如何强制 setup.py 解压模块文件?
【发布时间】:2017-06-29 11:22:20
【问题描述】:

Python 版本:2.7.12

我创建了自己的 Python 模块。这是一个简单的结构,我想在sys.path 指向的目录之一中精确复制

|-- setup.py
|-- mynamespace/
|   |-- __init__.py
|   |-- mymodule/
|   |   |-- __init__.py
|   |   |-- mymodule.py

因为是简单的项目,setup.py 包含列表:

py_modules = ['mynamespace.mymodule.mymodule']

我可以安装模块打字:

$ sudo python setup.py install

我注意到 setuptools 在安装过程中打印出了路径。当我去那里时,我可以看到mymodule-*.egg 文件。感谢他,我能够从任何本地化加载我的模块。但是.egg 文件类似于存档(当我将其扩展名更改为.zip 时,我可以解压缩文件并找到目录结构)。我知道该文件带来了跨平台兼容性解决方案。

我认为拥有解压目录是更好的解决方案。在不久的将来,我将在mynamespace 目录中发布另一个模块:

>>> from mynamespace import mymodule
>>> from mynamespace import mymodule1
>>> from mynamespace import mymodule2
...

我知道bash,我可以编写自己的安装脚本。我什至可以使用 Python 来做到这一点,但我认为更专业的方法是使用专用工具。

【问题讨论】:

  • 实际上.egg 文件是一个包含你的包的目录。因此,如果您想访问已安装的模块,您只需导航到 /.../site-packages/mymodule-*.egg。它应该包含您的包为mymodule,安装信息为EGG-INFO

标签: python installation setuptools setup.py


【解决方案1】:

您应该调查namespace packaging。我认为它将满足您的需求。 Python Packaging Authority 的文档解释了部署模块、包和命名空间包的各种方法。

Python 包管理非常复杂且非常灵活,因此我绝对不建议滚动您自己的安装机制。我也会推荐最简单的方法。就个人而言,我使用过namespace packagesindividual modulespackages。我得出的结论是,使用简单的平面包是最可靠的机制。他们还遵循Zen of Python 中的“简单胜于复杂”和“扁平胜于嵌套”的原则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 2012-08-22
    • 2016-06-09
    • 2018-07-31
    • 1970-01-01
    • 2021-03-15
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多