【问题标题】:Python import modules issuePython导入模块问题
【发布时间】:2018-04-03 10:56:14
【问题描述】:

我最近被要求在面试过程中交付一个 Python 项目。 我在 Windows 和 MacOSX 上使用 Pycharm、Spyder、jupyter notebook 和命令行测试了我的项目,一切正常。

但是,审阅者无法使项目在他这边工作,因为据他说是模块导入问题。

我的模块是这样组织的:

my_project/
  my_module.py
  main_module.py
  my_package/
    __init__.py
    my_submodule_1.py
    my_submodule_2.py

my_submodule_1.py:

import my_module
import my_submodule_2

我没有在 PYTHONPATH 中添加任何与此项目相关的路径。 项目主函数位于main_module.py。 审稿人似乎对my_submodule_1.py.中导入的模块有问题

谁能解释一下这里可能出现的错误,以及为什么它对我有用而不对他有用?

【问题讨论】:

  • 我可以看到两件事。 1-如果您在子目录文件中导入 my_module (这是父目录),那么您可能必须从父目录运行 python 文件。 python my_package/my_submodule_1.py 运行和 from my_package import my_submodule_1 如果您要在文件中导入。
  • 2- 第二件事是,如果你从父目录运行它,那么子模块文件应该有类似 from my_package import my_submodule_2 的导入来使用。

标签: python python-import python-module


【解决方案1】:

您的my_submodule_1 模块在直接导入my_submodule_2 时正在执行隐式相对导入。

这在 Python 3 中是不合法的。在 Python 2 中允许的,尽管使用它通常是个坏主意。您可以通过将from __future__ import absolute_import 放在文件中其他导入语句的上方来获得 Python 3 语义。要修复导入,您需要将 import my_submodule_2 更改为 import my_package.my_submodule_2(绝对导入)或 from . import my_submodule2(显式相对导入)。

如果您的面试官使用的是 Python 3 而您使用的是 Python 2,那么您的代码可能存在其他问题(尤其是在您进行任何类型的文本处理时),所以我会确保您以他们期望的版本重新测试您的代码!

【讨论】:

  • 这似乎是问题所在,我从 2.7 切换到 3.5,确实有导入问题
【解决方案2】:

我认为由于 my_module.pymy_submodule1.py 不在 same directory 中,并且在审阅者电脑上 sys .path 没有 my_module.py 的位置,这就是从其父目录导入模块时遇到问题的原因。

如果您提供审阅者得到的错误详细信息,可能有助于找到正确的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多