我在pycharm(Windows)中创建了2个python软件包(init.py-s为空),
并将文件从第二个程序包导入到第一个程序包( one.p y):
from bgr import two
仅此而已,没有循环进口。 当我从命令行运行文件时:
python one.py
我收到一个错误:
ModuleNotFoundError: No module named 'bgr'
有趣的是,当我从pycharm UI运行时,它可以正常工作。是什么原因导致这种奇怪的行为。
答案 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