python - 无法导入在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
可以从任何地方导入。
编辑:
您也可以使用相对导入。
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()
),但不推荐使用它们,因为它们仅适用于您的计算机,并且仅在您不更改其位置的情况下。
推荐阅读
- idris - 如何在 Idris 中编写一个简单的基于列表的快速排序?
- javascript - 允许 SPA 客户端使用客户端凭据授予令牌和个人访问令牌 - Laravel Passport
- ruby - 如何使用 Facebook Business SDK 检索页面的多个字段
- r - R:使用 lapply 同时在两个列表上迭代一个函数?
- python - 无法使用 easy_install 安装请求
- html - 2个CSS文件一个接一个加载
- json - JSON key-globbing
- python - 我如何让 python 存储多个人的数据?
- c# - 来自 Accord VideoCaptureDevice 的事件回调中的持续内存泄漏
- git - 如何在 git 中恢复提交