无法导入在pycharm中创建的包

2024-04-19 17:43:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

enter image description here

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

from bgr import two

仅此而已,没有其他,没有循环进口。 当我从命令行运行文件时:

python one.py

我得到一个错误:

ModuleNotFoundError: No module named 'bgr'

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


Tags: 文件no命令行frompyimportwindows错误
2条回答

按照上面的评论,我发现你想在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

如果您的工作目录在asd内,那么它需要一个名为bgr的模块在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内部)。其他地方都不行。你知道吗

有两种解决方法可以使其适用于任何位置,例如在stript内更改cwd(例如使用os.chdir()),或者在脚本内更改PYTHONPATH(例如sys.path.append()),但是不建议使用这些方法,因为它们只适用于您的计算机,并且只适用于您不更改的情况他们的位置。你知道吗

相关问题 更多 >