【问题标题】:Including a Python Library (suds) in a portable way以可移植的方式包含 Python 库 (suds)
【发布时间】:2012-08-30 10:28:50
【问题描述】:

我正在使用 suds(brilliant library,顺便说一句),我想让它可移植(以便使用依赖它的代码的每个人都可以签出文件并运行它)。

我已经找到了“suds-0.4-py2.6.egg”(在 python/lib/site-packages 中),并将其与我的文件一起放入,我已经尝试过:

import path.to.egg.file.suds
from path.to.egg.file.suds import *
import path.to.egg.file.suds-0.4-py2.6

前两个抱怨suds不存在,最后一个语法无效。

在 __init__.py 文件中,我有:

__all__ = [ "FileOne" ,
            "FileTwo",
      "suds-0.4-py2.6"]

之前尝试过

__all__ = [ "FileOne" ,
            "FileTwo",
      "suds"]

但两者都不起作用。

这是正确的做法吗?如果是这样,我怎样才能让我的进口工作。如果没有,我还能如何达到同样的效果?

谢谢

【问题讨论】:

  • 这不是供用户使用的,这是用于测试的,在我的文件中包含 suds 会更容易,然后将其安装在测试机器上。

标签: python import suds


【解决方案1】:

你必须将你的 egg 文件添加到sys.path,像这样:

import sys
# insert at 0 instead of appending to end to take precedence 
# over system-installed suds (if there is one).
sys.path.insert(0, "suds-0.4-py2.6.egg")
import suds

【讨论】:

    【解决方案2】:

    .egg 文件是压缩档案;因此你不能像你发现的那样直接导入它们。

    简单的方法是简单地解压缩存档,然后将suds 目录复制到应用程序的源代码目录。由于 Python 将在它发现的第一个模块处停止;即使没有为 Python 全局安装,也将使用您的本地 suds 副本。

    更进一步,将egg 添加到您的路径中,方法是将其附加到sys.path

    但是,正确的方法是package your application 进行分发;或提供requirements file,让其他人知道您的程序依赖于哪些外部包。

    【讨论】:

    • 这不是真的,你可以直接导入它们。请看下面我的回答。以这种方式分发软件不是一个好的和/或推荐的做法,但无论如何......
    • 这样做没有错;但正如你提到的,还有其他/更好的方法。
    【解决方案3】:

    通常我使用包含所有依赖项及其版本的requirements.txt 文件分发我的程序。 然后用户可以安装这些库:

    pip install -r requirements.txt
    

    我认为在您的代码中包含eggs 不是一个好主意,如果用户使用 python2.7 而不是 python2.6 会怎样

    关于需求文件的更多信息:http://www.pip-installer.org/en/latest/requirements.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多