PyCharm 导入与解释器

PyCharm 项目结构如下:


testImport

    target

        __init__.py

        script_1.py

        script_2.py

内容如下:


#script_1.py

import datetime


now_ts = datetime.datetime.now()

#script_2.py

from script_1 import now_ts


print('Now: {}'.format(now_ts))

PyCharm 要求我更正script_2.py文件中的导入行并使用from target.script_1 import now_ts. 一旦我尝试执行,~/testImport: ./target/script_2.py我就会得到ModuleNotFoundError: No module named 'target'。PyCharm 怎么可能建议错误的解决方案,或者是否发生了我不知道的事情?


慕容3067478
浏览 92回答 2
2回答

海绵宝宝撒

PyCharm 建议可能是因为 IDE 认为您的target文件夹是一个模块。模块中包含可执行脚本被视为反模式。我对此以及任何其他提议的主要 机械的调整都是-1。唯一的用例似乎是运行恰好位于模块目录内的脚本,我一直将其视为反模式。为了让我改变主意,你必须让我相信事实并非如此。我建议您更改项目的结构,使主要逻辑位于模块中,而可执行文件位于模块之外,即:testImport ├── script_1.py └── target     └── my_logic.py在你的 script_1.py 中:from target.my_logic import now_ts注意:当然,我在这里只是使用对权威的呼吁作为论据。根据您的用例,继续您正在开发的方式可能会更好。在这种情况下,只需忽略 IDE 建议即可。

ITMISS

关键是,当您以默认方式运行脚本时python ./target/script_2.py,解释器将被视为script_2主模块,不会让您找到上层文件夹。您可以通过以下方式来避免运行ModuleNotFoundError(仅当您清楚地了解自己在做什么时,不要在大型项目中使用):在~/testImport运行中python -m target.script_2script_2.py 添加在顶部__package__ = "target.script_2"script_2.py 添加在顶部if __name__ == "__main__":    import sys    import os    sys.path.insert(0, os.path.abspath(os.curdir))进入~/testImport并运行python ./target/script_2.py如果有人能帮助我纠正我不自然的英语,我将非常感激。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python