繁体   English   中英

导入模块无法通过终端运行,而可以通过IDE运行

[英]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脚本,该脚本将package1package2添加为软件包,而script1.py作为脚本添加,它们将安装在正确的目录中,以便您能够导入package1和从任何地方package2从任何地方运行script1.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM