Python错误“;ImportError:没有名为“的模块”;

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

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 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.
    

    在我的例子中,问题是我链接到debug
    python
    &
    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',
    )