Python 3:与脚本位于同一目录中的模块:";ImportError:没有名为“的模块”;
我正在尝试从IPython shell导入模块(Python 3:与脚本位于同一目录中的模块:";ImportError:没有名为“的模块”;,python,python-3.x,Python,Python 3.x,我正在尝试从IPython shell导入模块(场馆)。场馆模块已正确导入,但它随后尝试导入名为makesoup的模块,但未能导入 我位于~目录中,正在尝试导入位于子目录processors中的Vincements.py文件。makesoup.py文件也位于processors子目录中,这意味着它附近的任何Python脚本都应该能够找到它,对吗 In [1]: import processors.venues -------------------------------------------
场馆
)。场馆
模块已正确导入,但它随后尝试导入名为makesoup
的模块,但未能导入
我位于~
目录中,正在尝试导入位于子目录processors
中的Vincements.py
文件。makesoup.py
文件也位于processors
子目录中,这意味着它附近的任何Python脚本都应该能够找到它,对吗
In [1]: import processors.venues
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-765135ed9288> in <module>()
----> 1 import processors.venues
~/processors/venues.py in <module>()
7 """
8
----> 9 import makesoup
10 import re
11
ImportError: No module named 'makesoup'
[1]中的:导入处理器
---------------------------------------------------------------------------
ImportError回溯(最近一次呼叫最后一次)
在()
---->1.场地
()
7 """
8.
---->9进口肉汤
10进口稀土
11
ImportError:没有名为“makesoup”的模块
我在~
和处理器
目录中都添加了一个空的\uuu init\uuuuuuuuuuuuuuuupy
,未成功
注意:makesoup
模块在我位于处理器
时正确导入,但我知道这不是它工作的唯一方式
makesoup.py
文件也位于processors
子目录中,这意味着它附近的任何Python脚本都应该能够找到它,对吗
In [1]: import processors.venues
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-765135ed9288> in <module>()
----> 1 import processors.venues
~/processors/venues.py in <module>()
7 """
8
----> 9 import makesoup
10 import re
11
ImportError: No module named 'makesoup'
不会。此功能和该语法不再有效
将导入makesoup
更改为:
from . import makesoup
或为此:
from processors import makesoup
这两种情况都会导致无法直接运行
python处理器/vinces.py
,尽管您仍然可以从主目录执行python-m处理器.vinces
。有时,这不起作用:
from . import xxx
也许有人会告诉你在目录下添加init.py。这对某些特殊情况也不起作用
最有用的方法是首先使用以下命令检查sys.path:
import sys
print(sys.path)
然后您可以找到应该从何处导入
还有另一种方法:
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname("__file__"), '..')))
或者改用插入功能:
sys.path.insert(0, xxx)
这两种方法适用于小型项目。如果您的项目复杂且庞大,我建议您选择第一种方法。谢谢Kevin。但是,我不明白为什么这些解决方案会导致无法直接运行
Vinces.py
。您能告诉我为什么吗?如果您使用显式相对导入(我列出的第一个选项),则必须设置\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
魔术变量,但是在没有-m
的情况下直接运行脚本时,python
不会这样做。如果使用绝对导入,python可能无法找到处理器
包,因为它与脚本不在同一目录中。同样,-m
将修复此问题s、 在使用Python 3时,我也没有意识到这一变化。如果您只想从文件中导入函数,请尝试此from。makesoup导入此函数
答案应使用@blaylockbk comment进行编辑。这对我很有用。请注意,如果您只想从makesoup
导入单个符号,可以使用:from.makesoup从\u makesoup导入符号\u