首页 > 解决方案 > 无法导入在pycharm中创建的包

问题描述

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

在此处输入图像描述

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

from bgr import two

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

python one.py

我收到一个错误:

ModuleNotFoundError: No module named 'bgr'

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

标签: pythonpycharmpython-importimporterror

解决方案


如果您的工作目录在里面asd,那么它需要一个名为bgr inside asd的模块。在 pycharm 中,您的工作目录位于test_me外部asd,这就是它起作用的原因。

只需转到test_me目录并键入:

python asd/one.py

它应该工作

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


编辑:

您也可以使用相对导入

from ..bgr import two

然而,为了运行,这需要你在里面asd(它不会从 开始工作test_me)。模块是从您运行脚本的位置而不是从导入它们的脚本所在的位置搜索的。

有一种解决方法可以使其适用于两个位置:

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

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

有一些解决方法可以使其适用于任何位置,例如在条带内更改 cwd(例如 with os.chdir())或通过更改PYTHONPATH脚本内的 while (例如sys.path.append()),但不推荐使用它们,因为它们仅适用于您的计算机,并且仅在您不更改其位置的情况下。


推荐阅读