gpt4 book ai didi

python - 导入模块不能通过终端工作,而通过 IDE 工作

转载 作者:可可西里 更新时间:2023-11-01 14:14:24 25 4
gpt4 key购买 nike

我有一个由两个包组成的项目,如下所示:

MyProjectDir
-Package1
--__init__.py
--file1_1.py
--file1_2.py
--file1_3.py
-Package2
--__init__.py
--file2_1.py
--file2_2.py
--file2_3.py

现在,在包中,文件之间有一些导入:

file2_3.py:

from Package2.file2_1 import *
run_some_code()

当我直接从 PyCharm 运行 file2_3.py 时,一切运行正常。但是当我尝试在终端中运行脚本时(我在 Windows 7 上工作):

D:\SVN Repo\MyProjectDir\Package2> python file2_3.py

或者替代地

D:\SVN Repo\MyProjectDir> python ./Package2/file2_3.py

似乎 python 看不到我的包,我得到一个错误:

Traceback (most recent call last):
File "./Package2/file2_3.py", line 1, in <module>
from Package2.file2_1 import *
ImportError: No module named 'Package2'

这是什么原因?

编辑:如果在导入行中我使用 from file2_1.py import * 而没有包名称,IDE 会将导入强调为“Unresolved Reference Package2”(尽管它可以运行) ,并且终端工作...

最佳答案

问题是您运行程序的方式是错误的,PyCharm 知道如何处理 python 子模块并因此正确执行文件。

如果您有一个包含模块 package1.my_module 的包 package1,您应该使用 -m 开关运行它:

python -m package1.my_module

不要直接运行它:

python package1/my_module.py   <-- NO! Incorrect

此外:您应该从包的外部 运行该文件。因此,如果您的项目是:

MyProject
|
+- package1
| |
| +- file1.py
|
+- package2
|
+- file2.py

您的工作目录应该是 MyProject

我的个人建议:永远不要直接运行子模块。而是将代码放在包外的单独 脚本中。所以我会:

MyProject
|
+- package1
| |
| +- file1.py
|
+- package2
| |
| +- file2.py
|
+- scripts
|
+- script1.py

script1.py导入它需要的模块的地方:

from package1 import file1
from package2 import file2

# code

然后您可以从 MyProject 目录运行该脚本:

python scripts/script1.py

当您想要部署代码时,您将编写一个 setup.py 脚本,将 package1package2 作为包添加,同时 script1.py 作为脚本,它们将安装在正确的目录中,这样您就可以从任何地方导入 package1package2 并运行来自任何地方的 script1.py

关于python - 导入模块不能通过终端工作,而通过 IDE 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39266662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com