【问题标题】:trouble importing python modules from other packages (pycharm gives unresolved reference)从其他包导入 python 模块时遇到问题(pycharm 给出未解决的参考)
【发布时间】:2012-06-03 14:53:22
【问题描述】:

我不知道pycharm是否与问题有关,还是我是菜鸟。

这是我的文件夹布局和三个代码文件的截图:

我在 Windows 上使用 Pycharm,“my_working_directory”是我的工作目录。您可以在屏幕截图中看到 mod1.py 中“来自 package2.mod2”的下划线表示“未解析的引用”。

当我尝试运行 mod1.py 时,我得到:

C:\Python27\python.exe C:/Users/Robert/PycharmProjects/play/my_working_directory/package1/mod1.py
Traceback (most recent call last):
  File "C:/Users/Robert/PycharmProjects/play/my_working_directory/package1/mod1.py", line 1, in <module>
    from package2.mod2 import SomeClass
ImportError: No module named package2.mod2

当我运行 main.py 时,我得到:

C:\Python27\python.exe C:/Users/Robert/PycharmProjects/play/my_working_directory/main.py
hi

我不明白为什么一个有效而另一个无效。

主要问题是 pycharm 没有给我自动完成功能,并且从 mod1 中它无法检测到 package2。这是一个大问题,因为 package1 是我的视图包,package2 是我的模型或 utils 或 lib 包(在大型模型视图控制器中)。 (例如https://github.com/coto/gae-boilerplate/blob/master/web/handlers.py pycharm 没有检测到任何 from lib.? import ? 语句。(给出未解决的参考)。

有人知道发生了什么吗?这是导入包的最佳方式吗?我应该期望能够自动完成吗?

是否应该通过制作另一个init.py文件将“my_working_directory”制作成一个包?

【问题讨论】:

  • 认为您需要将其添加到您的 python 路径中。您可以从 main 中看到 package1,但是当您在 mod1 中导入 mod1 时,它无法从那里的导入中看到 package2,因为它在父文件夹中,而不是在 package1 中。
  • @GP89 ​​"将它添加到你的 python 路径",什么是 "it"? C:\Users\Robert\PycharmProjects\play\my_working_directory\ ?为我添加这个也应该是我的 IDE 的工作吗?或者对于我所有的项目,我应该在 compter > properties > advanced settings > environment variables 下弄乱我的 Windows 路径设置
  • 啊,我在 pycharm > 设置 > 项目结构下找到了,我不得不将项目根目录从 /play 更改为 /play/working_directory !!!非常感谢您帮助我解决这个问题。

标签: python import package importerror pycharm


【解决方案1】:

可能是 C:/Users/Robert/PycharmProjects/play 不在您的 %PYTHON_PATH%

【讨论】:

  • 嗨,Jakob,我想你可能会有所收获。我将 print sys.path 添加到 mod1.py 和 main.py。然后我运行 mod1.py 并记录了路径。然后我运行 main.py 并记录了路径。两个路径集的区别是: set(['C:\\Users\\Robert\\PycharmProjects\\play\\my_working_directory\\package1']) set(['C:\\Users\\Robert\\ PycharmProjects\\play\\my_working_directory'])
  • 在 mod1 我得到 path1 = sys.path for i in path1: if "play" in i: print i C:\Users\Robert\PycharmProjects\play\my_working_directory\package1 C:\Users\罗伯特\PycharmProjects\play
  • 在 main.py 我得到:for i in path2: if "play" in i: print i C:\Users\Robert\PycharmProjects\play\my_working_directory C:\Users\Robert\PycharmProjects\玩
  • 对,我有 /play 作为我的 pycharm 根目录,而我真的需要 /play/my_working_directory 作为我的项目根目录。
猜你喜欢
  • 2014-05-05
  • 2018-01-03
  • 2015-11-12
  • 2014-02-09
  • 2018-07-27
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多