无法导入在 pycharm 中创建的包

Can not import package created in pycharm

我在 pycharm (Windows) 中创建了 2 个 python 包(init.py-s 是空的),

并将文件从第二个包导入到第一个包 (one.py):

from bgr import two

仅此而已,没有别的,没有循环导入。 当我 运行 文件形成命令行时:

python one.py

我收到一个错误:

ModuleNotFoundError: No module named 'bgr'

有趣的是,当我从pycharm UI 运行 时它正常工作。什么会导致这种奇怪的行为。

如果您的工作目录在 asd 内,那么它需要一个名为 bgr inside asd 的模块。在 pycharm 中,您的工作目录是 test_me,它在 asd 之外,这就是它工作的原因。

只需转到 test_me 目录并键入:

python asd/one.py

它应该有效

另一种选择是将 bgr 添加到 PYTHONPATH 环境变量。然后bgr可以从任何地方导入。


编辑:

您也可以使用 relative imports.

from ..bgr import two

然而,为了 运行 需要 您在 asd 内(从 test_me 开始不起作用)。这些模块是从您 运行 安装脚本的位置搜索的,而不是从导入它们的脚本所在的位置搜索的。

有一个解决方法可以让它在两个位置都工作:

try:
    from bgr import two
except ModuleNotFoundError:
    from ..bgr import two

这仅适用于这两个位置(test_me 内和 test_me/asd 内)。它不适用于任何其他位置。

有一些变通方法可以使其适用于任何位置,例如在脱衣舞中更改 cwd(例如使用 os.chdir())或更改PYTHONPATH 虽然在脚本中(例如 sys.path.append()),但 不推荐使用 因为它们只适用于您的计算机,并且只有在您不更改的情况下他们的位置。

按照你上面的评论,我看到你想在 asd 文件夹上工作。不希望您的 bgr 随处可见。所以我敢打赌 PYTHONPATH 不是您要找的选项。您可以尝试以下操作:

import sys
sys.path.insert(0, "../")
from bgr import two

这将添加 bgr 模块并允许您像当前期望的那样使用它。 此处有更多详细信息:https://askubuntu.com/questions/470982/how-to-add-a-python-module-to-syspath