我正在尝试从源自同一父级的另一个目录导入模块。我得到的代码在Python 2.7中工作,但在Python 3.5中没有。
我正在使用py_file.py ===> H:/other/apple/work_here/py_file.py
我想从===>导入total_text.py; H:/other/apple/banana/total_text.py
导入适用于Python 2.7,但不适用于Python 3.5。在3.5中,我在香蕉下面得到一条红色的波浪线,当我运行代码时,错误显示“没有名为'banana'的模块”
import sys
import os
os.chdir(os.path.join("H:\\", "other", "apple", "work_here"))
sys.path.insert(0, os.path.join(os.path.split(__file__)[0], ".."))
import banana.total_text
要解决这个问题,我在两个程序中执行了以下print语句,发现我在Python 3.5程序中得到了混合斜杠。
在Python 2.7中,我得到了:
print sys.path [0] =====> H:\ other \ apple \ work_here ..#注意有一个\在这里之后的e没有出现。
print os.listdir(sys.path [0])=====> [u'banana',u'work_here']
在Python 3.5中,我得到以下内容:
print sys.path [0] =====> H:/ other / work_here ..#注意这里的e之后没有显示出来。
print os.listdir(sys.path [0])=====> ['apple','work_here']
我搜索并发现了一个部分修复:添加os.path.abspath(x)或os.path.normpath(x),其中x = os.path.join(os.path.split( file )[0],“..”)我得到了两个目录回到H:\ other ===>如果我将其写为: import apple.banana.total_text
,则import语句有效。使用os.path.abspath()版本,我得到:
print(sys.path [0])=====> H:\其他
print(os.listdir(sys.path [0]))=====> ['apple','work_here']
我试图让Python 3.5版本的工作方式与Python 2.7版本相同,并了解是否会导致3.5的行为方式不同。
答案 0 :(得分:0)
我能够让3.5版本正常运行。我用sys.path.insert(0,'..')替换了:sys.path.insert(0,os.path.join(os.path.split(file)[0],“..”)) / p>