无法导入在pycharm

时间:2019-09-02 16:35:36

标签: python pycharm python-import importerror

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

enter image description here

并将文件从第二个程序包导入到第一个程序包( one.p y):

from bgr import two

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

python one.py

我收到一个错误:

ModuleNotFoundError: No module named 'bgr'

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

2 个答案:

答案 0 :(得分:1)

如果您的工作目录位于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内部)。在其他任何地方都无法使用。

有两种变通办法可以使其在任何位置上正常工作,例如在小条区内更改cwd(例如,使用os.chdir())或更改PYTHONPATH虽然在脚本中(例如sys.path.append()),但是不推荐,因为它们仅在您的计算机上有效,并且仅当您不更改其位置时才可用。

答案 1 :(得分:1)

按照上面的评论,我已经看到您想在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