Python 导入模块不通过终端工作,而通过IDE工作
我有一个由以下两个包组成的项目:Python 导入模块不通过终端工作,而通过IDE工作,python,windows,import,Python,Windows,Import,我有一个由以下两个包组成的项目: 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\u 3.py: from Package2.file2_1 import * run_some_code() 当我直接从PyCharm运
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\u 3.py:
from Package2.file2_1 import *
run_some_code()
当我直接从PyCharm运行file2_3.py时,一切都正常运行。但当我尝试在终端中运行脚本时(我正在使用Windows 7):
或者
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'
回溯(最近一次呼叫最后一次):
文件“/Package2/file2_3.py”,第1行,在
从Package2.file2\u 1导入*
ImportError:没有名为“Package2”的模块
原因是什么
编辑:如果在导入行中,我使用的
from file2_1.py import*
没有包名,IDE会将导入下划线为“未解析的引用包2”(虽然它可以运行),并且终端工作…问题在于运行程序的方式是错误的,PyCharm知道如何处理python子模块,从而正确执行文件
如果您有一个包package1
和一个模块package1.my_module
,则应使用-m
开关运行此操作:
python -m package1.my_module
不要直接运行它:
python package1/my_module.py <-- NO! Incorrect
您的工作目录应该是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
。您可以在pycharm终端中执行“哪种python”操作,在windows终端中执行相同操作吗?另外,在pycharm终端“导入系统”和“系统路径”中进行检查,并在windows终端中进行相同的检查,以检查是否有任何差异。是的,它起作用了。感谢您的全面回答,谢谢!
from package1 import file1
from package2 import file2
# code
python scripts/script1.py