Python Can';似乎无法使用_uinit__uuu.py导入模块
当有人回答这个问题时,我会觉得自己是个十足的白痴,因为我知道我以前也做过 使用Python 2.7.5 我有以下文件结构:Python Can';似乎无法使用_uinit__uuu.py导入模块,python,python-2.7,import,Python,Python 2.7,Import,当有人回答这个问题时,我会觉得自己是个十足的白痴,因为我知道我以前也做过 使用Python 2.7.5 我有以下文件结构: sandbox/ |-- fun | |-- __init__.py | `-- spock.py |-- __init__.py `-- something |-- blah.py `-- __init__.py 请注意,在每个级别上都有一个\uuuu init\uuuuu.py文件。每个\uuuu init\uuuu.py都是空的 spock.
sandbox/
|-- fun
| |-- __init__.py
| `-- spock.py
|-- __init__.py
`-- something
|-- blah.py
`-- __init__.py
请注意,在每个级别上都有一个\uuuu init\uuuuu.py
文件。每个\uuuu init\uuuu.py
都是空的
spock.py
和blah.py
非常简单
spock.py
def helpmespock():
print "help me spock!"
胡说八道
import fun.spock
fun.spock.helpmespock()
从sandbox和从sandbox/something执行blah会导致相同的错误:
[me@computer sandbox]$ python something/blah.py
Traceback (most recent call last):
File "something/blah.py", line 1, in <module>
import fun.spock
ImportError: No module named fun.spock
现在这棵树看起来像这样:
sandbox/
|-- fun
| |-- __init__.py
| `-- spock.py
|-- something
| |-- blah.py
| `-- __init__.py
`-- test.py
执行test.py
会给出:
[sri@s6000-devel sandbox]$ python test.py
help me spock!
尝试绝对意义上的导入
import sandbox.fun.spock
您需要添加sys.path
import os, sys
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
import fun.spock
fun.spock.helpmespock()
尝试将“.”添加到您的路径:
import sys
sys.path.append("..")
from fun import spock
print spock.helpmespock()
问题是,您直接运行blah.py,导入无法将
sandbox.fun.spock
或fun.spock
作为父级解析,因为\uu name\uuuuuu
的计算结果为“\uu main\uuuuu”
因此,\uu name\uuu
应该是“sandbox.something.blah”
并且sandbox
必须在路径中:
from ..fun import spock
spock.helpmespock()
甚至更好
from ..fun import spock
def do():
spock.helpmespock()
我不知道这是否与其他人有关;但是我遇到了这个问题,因为我的系统(MacOSX10.15.6)使用Conda4.8.3,bashrc没有正确初始化,并且持续默认为系统python
# Open terminal:
python --version # Python 3.7.7
which python # $HOME/anaconda3/envs/env_name/bin/python
结果,我的python接口使用了错误的python版本(2.7而不是3.7)。如果有帮助,请在运行代码之前立即检查版本;在我的例子中,版本是在开发过程中部分切换的。Traceback(最后一次调用):import sandbox.fun.spock ImportError中第1行的文件“some/blah.py”:没有名为sandbox.fun.spock的模块。您的模块在python路径中吗?尝试将自己定位到沙盒的父目录中,然后运行代码。这也不起作用。{[sri@s6000-devel~]$python sandbox/something/blah.py Traceback(最后一次调用):文件“sandbox/something/blah.py”,第1行,在import sandbox.fun.spock importorror中:没有名为sandbox.fun.spock}的模块听起来我并不疯狂。我所做的应该有用,不[sri@s6000-devel something]$python blah.py文件“blah.py”,第1行import..fun.spock^SyntaxError:无效的syntaxes仍然没有乐趣。(Python 2.7.5)[sri@s6000-devel something]$python blah.py文件“blah.py”,第1行来自。。import fun.spock^SyntaxError:无效语法没有init.PYC文件这一事实提供了线索?这也可以,但我不应该直接操纵搜索路径。init.py文件应该使模块可用。对吗?你是对的,也许这对我们有用:something/blah.py的python路径执行是sandbox/something。py不知道如何获得乐趣,因为它是一个显式执行。如果在沙盒目录中创建一个新文件(test.py)时只导入something.blah,则情况会有所不同。执行这个文件的路径是sandbox(有趣的和一些已知的东西)(对不起我的英语不好)你可以用sys.path知道路径你的英语很好。我知道我以前没有操纵sys.path就这样做过。您是正确的,正在从sandbox works导入fun.spock。有关信息,请访问
import sandbox.something.blah
sandbox.something.blah.do()
# Open terminal:
python --version # Python 3.7.7
which python # $HOME/anaconda3/envs/env_name/bin/python
source $HOME/.bashrc
python --version # Python 2.7.16
which python # /usr/local/bin/python