我的python以某种方式无法在同一目录中找到任何模块。 我究竟做错了什么? (python2.7)
所以我有一个目录' 2014_07_13_test',里面有两个文件:
其中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
出了什么问题?
答案 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 install
或python3 setup.py develop
安装您所在的软件包,该软件包将是已安装,但仍可编辑(因此,在导入软件包时会看到对代码的更改)。如果没有setup.py
,则make sense of it。
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],则在此处打开完整的文件夹,而不是单个文件。