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