我在这里遇到了一个特别棘手的问题。
我目前正在开发一个个人项目,从一个相对简单的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]
答案 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__.py
和pylol.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'