python – 导入模块不通过终端工作,而它通过IDE工作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 导入模块不通过终端工作,而它通过IDE工作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1747字,纯文字阅读大概需要3分钟。
内容图文
我有一个包含两个包的项目,如下所示:
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'
是什么原因?
编辑:如果在导入行中我使用file2_1.py import *而没有包名,IDE会将导入强调为“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.
内容总结
以上是互联网集市为您收集整理的python – 导入模块不通过终端工作,而它通过IDE工作全部内容,希望文章能够帮你解决python – 导入模块不通过终端工作,而它通过IDE工作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。