Python错误“;ImportError:没有名为“的模块”;
Python安装在本地目录中 我的目录树如下所示:Python错误“;ImportError:没有名为“的模块”;,python,importerror,python-import,Python,Importerror,Python Import,Python安装在本地目录中 我的目录树如下所示: (local directory)/site-packages/toolkit/interface.py from site-packages.toolkit.interface import interface 我的代码在这里: (local directory)/site-packages/toolkit/examples/mountain.py 为了运行该示例,我编写了python mountain.py,在代码中: from to
(local directory)/site-packages/toolkit/interface.py
from site-packages.toolkit.interface import interface
我的代码在这里:
(local directory)/site-packages/toolkit/examples/mountain.py
为了运行该示例,我编写了python mountain.py
,在代码中:
from toolkit.interface import interface
我得到了一个错误:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
我已经检查了sys.path
,那里有目录/site packages
。另外,我在toolkit文件夹中有一个文件\uuuu init\uuu.py.bin
,用于向Python指示这是一个包。我在examples目录中还有一个\uuuu init\uuuu.py.bin
我不知道为什么Python在
sys.path
中找不到该文件。有什么想法吗?这可能是权限问题吗?我需要一些执行权限吗?要将目录标记为包,您需要一个名为\uuu init\uuuuuuuuuupy的文件,这有帮助吗?没有
(local directory)/site-packages/toolkit
有一个\uuuu init\uuuuuuuuuuupy
要使导入遍历您的目录,每个目录都必须有一个\uuu init\uuuu.py
文件。根据您对orip帖子的评论,我猜发生了以下情况:
您在windows上编辑了\uuuuu init\uuuuuuuuuuuuuuuupy
windows编辑器添加了一些非打印的内容,可能是回车符(windows中的行尾为CR/LF;unix中仅为LF),也可能是CTRL-Z(windows文件结尾)
您使用WinSCP将文件复制到unix设备中
WinSCP认为:“这不是基本的文本;我将使用.bin扩展名来表示二进制数据。”
缺少的\uuuu init\uuuuu.py
(现在称为\uuuu init\uuuuuu.py.bin
)意味着python不将工具箱理解为一个包
您在适当的目录中创建了\uuuuu init\uuuuuuuuuy.py
,一切正常吗李>
我解决了自己的问题,我会写一篇总结,总结出错误的地方和解决方案:
需要准确地调用该文件\uuuu init\uuuu.py
。如果扩展名不同,比如在我的例子中.py.bin
,那么Python无法在目录中移动,也无法找到模块。要编辑文件,需要使用Linux编辑器,如或。如果使用Windows编辑器,这将写入一些隐藏字符
影响它的另一个问题是,我的root用户安装了另一个Python版本,因此如果有人正在使用Python的本地安装,请确保运行程序的Python安装是本地Python。要检查这一点,只需执行whichpython
,并查看可执行文件是否位于本地目录中。如果没有,请更改路径,但请确保本地Python目录比其他Python目录早。是的。您需要包含\uuuu init\uuuu.py
文件的目录,该文件是初始化包的文件。来,看一看
需要使用_init__;.py文件使Python将目录视为包含包;这样做是为了防止具有公共名称(如字符串)的目录无意中隐藏稍后在模块搜索路径上出现的有效模块。在最简单的情况下,_init_uuuuuuu.py可以只是一个空文件,但它也可以为包执行初始化代码或设置uuuuuuu all_uuuuuuuu变量,稍后将进行描述
在*nix上,还要确保PYTHONPATH配置正确,尤其是它具有以下格式:
.:/usr/local/lib/python
(注意开头的:
,这样它也可以搜索当前目录。)
它也可能位于其他位置,具体取决于版本:
.:/usr/lib/python
.:/usr/lib/python2.6
.:/usr/lib/python2.7 and etc.
在我的例子中,问题是我链接到debugpython
&boost::python
,这要求扩展名是doubib_d.pyd
,而不仅仅是doubib.pyd
;重命名文件或更新CMakeLists.txt
properties可修复此错误
您必须将文件_u; init _u; py.py放在您要导入的文件所在的同一目录中
您不能尝试导入具有相同名称且是PYTHONPATH上配置的2个文件夹中的文件的文件
例如:
/etc/环境
PYTHONPATH=$PYTHONPATH:/opt/folder1:/opt/folder2
/opt/folder1/foo
/opt/folder2/foo
而且,如果您试图导入foo文件,python将不知道您想要哪个文件
从foo导入…>>>importerror:没有名为foo的模块我在LPTHW中进行此练习时遇到了非常类似的情况;我无法让Python意识到我调用的目录中有文件。但我最终还是成功了。我所做的,以及我所推荐的,就是尝试一下:
(注意:从您最初的帖子中,我假设您使用的是基于*NIX的机器,并且是从命令行运行的,所以这个建议是针对这个问题量身定做的。因为我运行的是Ubuntu,所以我就是这么做的)
1) 将目录(cd)更改为文件所在目录上方的目录。在本例中,您尝试运行mountain.py
文件,并尝试调用toolkit.interface.py
模块,它们位于不同的目录中。在本例中,您将转到包含这两个文件的路径的目录(或者换句话说,这两个文件的路径共享的最近目录)。在本例中,它是toolkit
目录
2) 当您在tookit
目录中时,在命令行中输入以下代码行:
导出PYTHONPATH=。
这会将PYTHONPATH设置为“.”,这基本上意味着PYTHONPATH现在将在您当前所在的目录中查找任何被调用的文件,(更重要的是,在您所在目录的子目录分支中。因此,它不仅查找当前目录,而且查找当前目录中的所有目录)
3) 在上述步骤中设置PYTHONPATH后,从当前目录(工具包中)运行模块
Traceback (most recent call last):
File "bash\bash.py", line 454, in main
import bosh
File "Wrye Bash Launcher.pyw", line 63, in load_module
mod = imp.load_source(fullname,filename+ext,fp)
File "bash\bosh.py", line 69, in <module>
from game.oblivion.RecordGroups import MobWorlds, MobDials, MobICells, \
ImportError: No module named RecordGroups
Booklet
-> __init__.py
-> Booklet.py
-> Question.py
default
-> __init_.py
-> main.py
from Booklet import Question
from Question import Question
from Booklet.Question import Question
from Booklet.Question import *
import Booklet.Question
# and many othet various combinations ...
from booklet.Booklet import Booklet
from booklet.Question import Question
from booklet.Question import AnotherClass
export PYTHONPATH=$PYTHONPATH:`pwd` (OR your project root directory)
import sys
sys.path.insert(0,'<project directory>') OR
sys.path.append('<project directory>')
from site-packages.toolkit.interface import interface
try:
from namespace import something
except NameError:
from .namespace import something
import setuptools
setuptools.setup(
name="example-pkg",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)