【问题标题】:Python path when importing can't be resolved无法解析导入时的 Python 路径
【发布时间】:2019-04-09 15:50:23
【问题描述】:

我认为这是一个相当常见的问题,但我似乎无法导入我的 Python 模块。

这段代码在我回家的 Ubuntu 机器上运行得非常好,但在我工作的 Windows 机器上似乎不起作用。这让我相信它归结为 Python 在 Windows 上的工作方式与 *nix 系统相比存在差异,或者它处理模块的方式完全不同。

根据我的理解,模块应该根据sys.path 加载,根据有关该问题的所有其他问题和我已完成的阅读。

但是,我有一个像这样的简单项目:

DataStructures
├───.git
└───Python
    ├───DoublyLinkedListStarter.py
    └───LinkedLists
        ├───Doubly.py
        └──────LinkedNodes
               └───DoublyLinkedNode.py

如果我导航到 Python/ 并运行 python .\DoublyLinkedListStart.py,我会在 Doubly.py 中收到模块错误:

无法导入模块 LinkedNodes

代码非常基础,它是双向链表的 Python 实现,其中DoublyLinkedListStarter 导入实现主体链表的Doubly,并导入DoublyLinkedNode

DoublyLinkedListStart.py:

from LinkedList import Doubly

Doubly.py:

from LinkedNodes import DoublyLinkedNode

再一次,在我将它推到 git 并在我的 Windows 机器上拉下来之前,这在我的 Ubuntu 机器上运行得非常好。

【问题讨论】:

  • 您能否将导入LinkedNodes 模块的代码部分包含在内?
  • @Andreas 完成。如前所述,它是超级基本的。它应该工作
  • 您是否尝试在起始文件夹中放置一个“__init__.py”文件(否则为空)?

标签: python python-3.x import path python-import


【解决方案1】:

试试这个:

from LinkedLists.LinkedNodes import DoublyLinkedNode

但这是 PYTHONPATH 系统变量的问题。另一种方法是将其添加到 PYTHONPATH 系统变量中:

set PYTHONPATH=%PYTHONPATH%;LinkedLists\LinkedNodes
python .\DoublyLinkedListStart.py

每次打开命令行时都必须这样做。

python 使用的路径可以在 python 脚本中使用 sys.path 访问,它是一个列表。这提供了另一种添加导入路径的方法:

import sys
sys.path.append("LinkedLists")
from LinkedNodes import DoublyLinkedNode

你有选择;)

【讨论】:

  • 奇怪。我的意思是,那将对其进行排序。但这似乎比正确的做法更像是一种黑客行为。当然,我不应该从我运行DoublyLinkedListStarter.py 的位置添加相对路径吗? Python 应该足够聪明,可以查看cursor 的位置,或者以某种方式计算文件的位置并根据当前目录评估模块的路径?
  • 我编辑了答案,我给出的第一个例子是进行导入的最佳方式。根目录是执行 python 的目录,您必须列出要导入的目录的完整路径。否则,您只能从特定脚本所在目录下的目录导入,而无法从树中的“兄弟”目录导入。不可能“上一层楼”。
  • 但正如我所提到的,正如您在我的帖子中看到的那样,DoublyLinkedListStart 不引用节点,仅引用 Doubly.py。所以可以肯定的是,如果Doubly.py 导入其文件夹中的DoublyLinkedNodes.py,应该没问题吧?这不像我在开始文件中进行所有导入。
  • 试试这个:从 .LinkedNodes 导入 DoublyLinkedNode
猜你喜欢
  • 2023-01-24
  • 2021-03-25
  • 2023-04-05
  • 2018-10-08
  • 2017-05-26
  • 2020-05-06
  • 1970-01-01
  • 2021-03-29
  • 2016-08-22
相关资源
最近更新 更多