这个问题在这里已经有了答案:\n python & suds \xe2\x80\x9cImportError: Cannot import name getLogger\xe2\x80\x9d
\n\n但似乎我遇到了一种无法用答案解释的情况。
\n\n详细信息如下:
\n\n我有一个名为logging.py 的文件。代码如下:
\n\nimport sys\nprint(sys.path)\nfrom logging import getLogger\n
Run Code Online (Sandbox Code Playgroud)\n\n我知道如果我运行 python3logging.py ,它将无法工作。因为 python 会尝试搜索 sys.path 中的目录来查找日志记录模块。这样,sys.path[0]将是脚本的目录,以便python直接从脚本的目录加载模块日志记录,而不是搜索python标准lib。
\n\n这是输出:
\n\n# chuck @ LAPTOP-RN92LIAI in ~/editable_package/test_py [12:01:43]\n$ python3 logging.py\n[\'/home/chuck/editable_package/test_py\', \'/usr/lib/python36.zip\', \n\'/usr/lib/python3.6\', \'/usr/lib/python3.6/lib-dynload\', \n\'/home/chuck/.local/lib/python3.6/site-packages\', \n\'/usr/local/lib/python3.6/dist-packages\', \'/usr/lib/python3/dist-packages\']\n.....\nImportError: cannot import name \'getLogger\'\n
Run Code Online (Sandbox Code Playgroud)\n\n所以我尝试将文件作为 python3 -mlogging 运行,我期望 sys.path 没有模块的目录,以便 python 将搜索 sys.path 中标准 lib 的目录。
\n\n然而,结果表明 sys.path 是预期的,但 python 搜索的模块不是:
\n\n:!python3 -m logging\n[\'\', \'/usr/lib/python36.zip\', \'/usr/lib/python3.6\', \'/usr/lib/python3.6/lib- \ndynload\', \'/home/chuck/.local/lib/python3.6/site-packages\', \n\'/usr/local/lib/python3.6/dist-packages\', \'/usr/lib/python3/dist-packages\']\n...\nTraceback (most recent call last):\n File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main\n "__main__", mod_spec)\n File "/usr/lib/python3.6/runpy.py", line 85, in _run_code\n exec(code, run_globals)\n File "/home/chuck/editable_package/test_py/logging.py", line 3, in <module>\n from logging import getLogger\n File "/home/chuck/editable_package/test_py/logging.py", line 3, in \n <module>\n from logging import getLogger\n ImportError: cannot import name \'getLogger\'\n
Run Code Online (Sandbox Code Playgroud)\n\n我对此感到困惑。只是不知道为什么。任何建议将不胜感激。
\n问题是您将文件命名为“logging.py”,这使得它看起来像Python本机“logging”模块。当您运行该文件时,它会尝试从自身导入 getLogger,但这不起作用,因为它没有在那里定义。重命名你的文件,它就会起作用。
归档时间: |
|
查看次数: |
10579 次 |
最近记录: |