Python包 - ImportError

时间:2018-03-29 17:54:46

标签: python import error-handling

我在这里遇到了一个特别棘手的问题。

我目前正在开发一个个人项目,从一个相对简单的Riot API包装器开始,一直运行良好,直到我想打包它并组织模块。这是项目的链接:Logistic Analysis for LoL(我觉得这比试图描述文件夹的结构,文件中的内容等更容易。

我要做的是创建一个测试套件,以确保在继续之前一切正常。起初我在主目录下有一个'tests'文件夹,但现在只使用tests.py;但我无法导入'pylol'(将是主程序包),也不能导入'lol_api_wrapper'(包装Riot API的子包)。我在每个目录中都有 init .py文件,因此我不确定为什么Python无法识别这些包。

起初我在想循环进口,但我没有看到任何东西?

谢谢大家......

错误输出:

Traceback (most recent call last):
  File "/Users/mattmurray/Documents/GitHub/Logistic-Analysis-for-LoL/tests.py", line 1, in <module>
    import pylol
  File "/Users/mattmurray/Documents/GitHub/Logistic-Analysis-for-LoL/pylol/__init__.py", line 1, in <module>
    from . import riot_api_wrapper
  File "/Users/mattmurray/Documents/GitHub/Logistic-Analysis-for-LoL/pylol/riot_api_wrapper/__init__.py", line 1, in <module>
    from utils import Session
ModuleNotFoundError: No module named 'utils'
[Finished in 0.1s with exit code 1]
[cmd: ['/anaconda/envs/py36/bin/python3', '-u', '/Users/mattmurray/Documents/GitHub/Logistic-Analysis-for-LoL/tests.py']]
[dir: /Users/mattmurray/Documents/GitHub/Logistic-Analysis-for-LoL]
[path: /anaconda/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin]

1 个答案:

答案 0 :(得分:1)

from utils import Session告诉python搜索utils的模块路径,但它被隐藏在一个包中并且无法找到。如何将python与其他人的其他utils.py区别开来?

您正在使用pylol级别(from . import riot_api_wrapper)的包相对导入。继续在子包中执行此操作,例如from .utils import Session。点告诉python查看riot_api_wrapper的当前包目录utils。两个点将有python查看父pylol目录。

在提取代码后,我将pylol.__init__.pypylol.riot_api_wrapper.__init__.py中的第一个导入更改为相对导入。这是差异:

$ git diff origin/dev_1.0
diff --git a/pylol/__init__.py b/pylol/__init__.py
index 746a67d..d9d493f 100644
--- a/pylol/__init__.py
+++ b/pylol/__init__.py
@@ -1 +1 @@
-import riot_api_wrapper
\ No newline at end of file
+from . import riot_api_wrapper
diff --git a/pylol/riot_api_wrapper/__init__.py b/pylol/riot_api_wrapper/__init__.py
index f51bb86..f831152 100644
--- a/pylol/riot_api_wrapper/__init__.py
+++ b/pylol/riot_api_wrapper/__init__.py
@@ -1,4 +1,4 @@
-from utils import Session
+from .utils import Session

 from champion import Champion

然后我从基本目录运行测试,它超过了前两个导入。它在下一次导入时失败,我没有修复。其中有很多,我很容易分心。

所以,为我工作!

td@mintyfresh ~/tmp/pkg/Logistic-Analysis-for-LoL $ python3 tests.py
Traceback (most recent call last):
  File "tests.py", line 1, in <module>
    import pylol
  File "/home/td/tmp/pkg/Logistic-Analysis-for-LoL/pylol/__init__.py", line 1, in <module>
    from . import riot_api_wrapper
  File "/home/td/tmp/pkg/Logistic-Analysis-for-LoL/pylol/riot_api_wrapper/__init__.py", line 1, in <module>
    from .utils import Session
  File "/home/td/tmp/pkg/Logistic-Analysis-for-LoL/pylol/riot_api_wrapper/utils.py", line 1, in <module>
    import constants as const
ImportError: No module named 'constants'