Python无法在同一文件夹中找到模块

时间:2014-07-13 11:33:36

标签: python module

我的python以某种方式无法在同一目录中找到任何模块。 我究竟做错了什么? (python2.7)

所以我有一个目录' 2014_07_13_test',里面有两个文件:

  1. test.py
  2. hello.py
  3. 其中hello.py:

    # !/usr/local/bin/python
    # -*- coding: utf-8 -*-
    
    def hello1():
        print 'HelloWorld!'
    

    和test.py:

    # !/usr/local/bin/python
    # -*- coding: utf-8 -*-
    
    from hello import hello1
    
    hello1()
    

    仍然是python给了我

    >>> Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<string>", line 4, in <module>
    ImportError: No module named hello
    

    出了什么问题?

9 个答案:

答案 0 :(得分:53)

将test.py中的导入更改为:

from .hello import hello1

答案 1 :(得分:50)

您的代码很好,我怀疑您的问题是您启动它的方式。

你需要从你的&#39; 2014_07_13_test&#39;中启动python。 。目录

打开命令提示符,然后点击“&#39;进入你的&#39; 2014_07_13_test&#39; 。目录

例如:

$ cd /path/to/2014_07_13_test
$ python test.py

如果你不能&#39; cd&#39;进入这样的目录,你可以将它添加到sys.path

在test.py中:

import sys, os
sys.path.append('/path/to/2014_07_13_test')

或设置/编辑PYTHONPATH

一切都应该好......

......好吧,你的&#39; shebang&#39;行(两个文件中的第一行),不应该是&#39;#&#39;之间的空格。和&#39;!&#39;

您应该使用better shebang

此外,您不需要每个文件上的shebang行...只有您打算从shell运行的文件作为可执行文件。

答案 2 :(得分:12)

我遇到了类似的问题,我通过将文件目录显式添加到路径列表中解决了这个问题:

import os
import sys

file_dir = os.path.dirname(__file__)
sys.path.append(file_dir)

之后,我从同一目录导入没有问题。

答案 3 :(得分:6)

这是我使用的通用解决方案。它解决了从同一文件夹中的模块导入的问题:

import os.path
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

将它放在模块的顶部,这会产生错误&#34;没有名为xxxx的模块&#34;

答案 4 :(得分:1)

在我的情况下,Python无法找到它,因为我将代码放在带有连字符的模块中,例如my-module。当我将其更改为my_module时,它起作用了。

答案 5 :(得分:0)

我遇到了这个问题。我在同一目录中有三个文件夹,因此必须指定哪个文件夹。         例如:从文件夹导入脚本

答案 6 :(得分:0)

在这里使用Pycharm,Python 3:

我的文件名为“ file_to_open”

我将其更改为“ FileToOpen”,并且工作正常。

问题:可能不喜欢下划线'_'

答案 7 :(得分:0)

以下内容不能解决OP的问题,但标题和错误正是我所遇到的。

如果您的项目中包含setup.py脚本,则可以使用python3 -m pip install -e .python3 setup.py installpython3 setup.py develop安装您所在的软件包,该软件包将是已安装,但仍可编辑(因此,在导入软件包时会看到对代码的更改)。如果没有setup.py,则make sense of it

反正OP面临的问题似乎不再存在了?

文件one.py

def function():
    print("output")

文件two.py

#!/usr/bin/env python3

import one
one.function()
chmod +x two.py # To allow execution of the python file
./two.py # Only works if you have a python shebang

Command line output: output

其他解决方案似乎“肮脏”

对于带有2个测试文件的OP,将其修改为可以正常工作。但是,在其他实际情况下,可能不建议使用其他答案中列出的方法。它们要求您修改python代码或限制灵活性(从特定目录运行python文件),并且通常会带来麻烦。如果您刚刚克隆了一个项目,然后发生这种情况怎么办?它可能已经对其他人有用,并且无需更改代码。选择的答案还希望人们从特定文件夹运行脚本以使其起作用。这可能是长期烦恼的根源,这永远都不是一件好事。它还建议您将特定的python文件夹添加到PATH(可以通过python或命令行完成)。同样,如果您在几个月后重命名或移动文件夹会发生什么?您必须再次浏览该页面,最终发现您需要设置路径(并且几个月前您确实做了此设置),并且您只需要更新路径(确保可以以编程方式使用sys.path即可)。进行设置,但这还是有点不稳定)。许多令人烦恼的来源。

答案 8 :(得分:0)

如果您确定要导入的所有模块,文件都在同一个文件夹中,并且应仅通过提供名称而不是引用路径直接选择它们,那么您的编辑器或终端应已打开主菜单所有文件/模块都存在的文件夹。

要么尝试从Terminal运行,请确保首先进入正确的目录。

cd path to the root folder where all the modules are

python script.py

或者,如果从编辑器(即VsCode)运行[F5],则在此处打开完整的文件夹,而不是单个文件。