无法导入在 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
我在 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