Moved a script into a directory, imports now failing
我正在使用Visual Studio代码。我有一个正在运行的python脚本,但我意识到我想把它作为一个类,供其他脚本使用。文件结构如下:
1 2 3 4
| pha
libclass.py
__init.py__
myScript.py |
而且效果很好。myScript.py进口pha.libclass没有问题。想把myScript.py添加到我的库中,我把它移到pha文件夹中。
1 2 3 4
| pha
libclass.py
__init.py__
myScript.py |
当我现在尝试运行它时,from pha.libclass import *调用会导致一个错误:
1 2
| Exception has occurred: ModuleNotFoundError
No Module named 'pha' |
我错过什么了吗?
- 您尝试重新启动VSC了吗?
- 为了使pha成为一个包,它需要一个名为__init__.py的文件。
- @我有巴黎面包师。运气不好。
- @彼得伍德有一个。
- @比兹尔不是,如果它被称为__init.py__,它不是。
- @Peterwood您不需要(空的)__init__.py文件来定义python 3中的包,这个问题被标记为。看到这个了。虽然__init.py__是错误的名字这一点是绝对正确的。
- 当你把myScript.py移到pha目录中时,你把它作为包的一部分,但是直接运行它,你就好像没有那样做。你可以让import在这种情况下工作,只使用一个常规的from libclass import *,因为libclass.py现在和myScript.py在同一目录中。
- 对于第十亿次相对进口这一问题的公认答案中有关于这类事情的好信息。
python找不到模块pha,需要在myscript.py中将import语句改为import libclass/from libclass import *,因为这两个脚本现在并排在同一目录下。
- 正确的。。。所以问题是,我过于简单化了这个问题。我在pha.ps.sbpro中有一个脚本(三个嵌套目录),该脚本由libclass导入。一旦我做出你建议的改变,这些进口产品就会破裂。我不想开始更改任何这些导入,因为根级别有更多的脚本使用整个库。我不应该在所有不同级别的包结构中运行脚本吗?
- @比兹尔:不,你不是。
- @为什么我的答案被否决了?我认为它解决了你在这里发布的问题(如果你过于简单化了,很抱歉)。请试着纠正你的问题。
- @比兹尔:我建议的修改只是在myscript.py中。你能把你正在处理的所有代码和文件/目录都贴出来吗?
- @比兹尔,你会更新你的问题并尽快消除过于简单化的问题吗?
- @不幸的是,整个项目规模相当大,因为它是我雇主的财产,所以我不能透露。最后,我放弃了从类所在的文件执行脚本的调用,并在根级别创建了一个脚本来调用它,就像处理其余的脚本一样,从而避免了这个问题。谢谢。