[英]Import module does not work through terminal, while it works through IDE
我有一个包含两个软件包的项目,如下所示:
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 from file2_1.py import *
下划线标为“ Unresolved Reference Package2”(尽管它可以运行),并且终端可以工作...
问题是您运行程序的方式是错误的 ,PyCharm知道如何处理python子模块,从而正确执行了文件。
如果您的软件包package1
带有模块package1.my_module
,则应使用-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
脚本,该脚本将package1
和package2
添加为软件包,而script1.py
作为脚本添加,它们将安装在正确的目录中,以便您能够导入package1
和从任何地方package2
从任何地方运行script1.py
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.