【问题标题】:ModuleNotFoundError: No module named 'version'ModuleNotFoundError:没有名为“版本”的模块
【发布时间】:2020-01-07 18:41:18
【问题描述】:

我将 Python 3 和 SOAPpy 库与我的代码一起使用。尝试运行我的代码时,我不断收到“ModuleNotFoundError: No module named 'version'”错误。错误来自库中的这一特定行:

from version import __version__

如何修复错误?

【问题讨论】:

  • 什么是version?请提供更多信息。否则错误很明显,没有version这样的模块(或python文件)。
  • SOAPpy 的版本是 0.12.22,但我不知道该放在哪里或这样做的语法。
  • 如果您只是想在代码中获取 SOAPpy 的版本,对于大多数模块,例如 numpy,您可以使用import numpynumpy.__version__ 获取其版本。你能在 SOAPpy 上试试这个吗?

标签: python libraries soappy


【解决方案1】:

人们通常在模块中设置变量__version__ 以使其可用于 要检查的世界,它甚至有一个PEP

我不确定您指的是哪一行,但 are many 在 SOAPpy 包中具有相同的罪证导入。

您可以看到here 包确实有一个version 模块定义了一个__version__ 变量。我不知道你是如何在你的项目中包含这个包的,但我会解释一些关于导入的内容,你可以阅读更多here

罪名可以有两种选择

from .version import __version__ # relative import

from SOAPpy.version import __version__ # absolute import

你可以把它们读作“路径”,第一个是当前目录下的version.py文件,第二个是SOAPpy目录下的version.py文件。

它们都很好,但有时到处重复 SOAPpy 工作量太大。

让我们修复该行以进行相对导入

diff --git a/SOAPpy/__init__.py b/SOAPpy/__init__.py
index 0e039f8..832a560 100644
--- a/SOAPpy/__init__.py
+++ b/SOAPpy/__init__.py
@@ -1,15 +1,15 @@

 ident = '$Id: __init__.py,v 1.9 2004/01/31 04:20:06 warnes Exp $'
-from version import __version__
+from .version import __version__

-from Client      import *
-from Config      import *
-from Errors      import *
-from NS          import *
-from Parser      import *
-from SOAPBuilder import *
-from Server      import *
-from Types       import *
-from Utilities     import *
+from .Client      import *
+from .Config      import *
+from .Errors      import *
+from .NS          import *
+from .Parser      import *
+from .SOAPBuilder import *
+from .Server      import *
+from .Types       import *
+from .Utilities     import *
 import wstools
 import WSDL

事实上,如果我现在运行python setup.py install,我会得到一个不同的错误

Traceback (most recent call last):
  File "setup.py", line 8, in <module>
    from SOAPpy.version import __version__
  File "/home/edoput/repo/SOAPpy/SOAPpy/__init__.py", line 5, in <module>
    from .Client      import *
  File "/home/edoput/repo/SOAPpy/SOAPpy/Client.py", line 95
    raise IOError, "unsupported SOAP protocol"
                 ^
SyntaxError: invalid syntax

所以确实这个库没有升级到使用python3可能是个问题!

让我们改用 python2,即使we should not

virtualenv env --python=python2
source env/bin/activate
python setup.py install

现在一切都正确安装了,这个库最近肯定没有更新,你仍然可以使用它,但你必须坚持使用 python 2.7。玩得开心!

【讨论】:

    【解决方案2】:

    SOAPpy (pypy) 似乎是用于 python2 的过时库,这就是为什么库中的某些代码会产生这些错误的原因。使用Zeep - 一个现代 SOAP python3 兼容客户端可能会更好。

    【讨论】: