繁体   English   中英

为什么SublimeREPL无法导入Python模块或不读取CWD中的文件?

[英]Why SublimeREPL won't import a Python module or read a file in CWD?

我正在使用SublimeREPL插件在Ubuntu Zesty上使用Sublime Text 3 build 3126。

我使用CTRL + SHIFT + P >> SublimeREPL打开Python REPL :Python,并使用CTRL +,F和everything将文件发送到REPL,只要我使用单个Python脚本文件即可。 一旦我尝试将代码的某些部分移至另一个模块并将其导入主文件中,就会收到讨厌的ImportError:没有名为 error的模块

尝试使用以下命令打开位于同一目录中的文本文件:

codecs.open('filename', encoding='utf-8')

结果是:

 IOError: [Errno 2] No such file or directory: 'filename'

您是否调查了打开SublimeREPL:Python的文件/面板与print os.getcwd()的输出之间是否存在关系? SublimeREPL在REPL启动时初始化其cwd。 cwd将在REPL的整个生命周期内保持不变。

正如您所指出的, SublimeREPL:Python的默认cwd是:

"cwd": "$file_path"

这意味着以空的Sublime面板中的光标启动SublimeREPL:Python会导致/opt/sublime_text/作为cwd。 这可能被认为是不希望的并且令人困惑。

但是,如果在光标位于要运行的.py文件中时启动SublimeREPL:Python ,则REPL将使用当前.py文件的文件夹作为其cwd。

我个人认为这是理想的行为,但是您必须先了解它,然后才能变得方便。

如果将cwd的设置更改为:

"cwd": "$folder",

对于不使用sublime-projects的情况,上述行为保持不变。 当您确实使用sublime-project时,python REPL cwd将成为主项目文件夹,而与REPL启动时的光标位置无关。 如果您有python驱动的项目,则这可能是所需的行为。 但是,如果您只是在较大的项目中使用某些python脚本,则可能不希望主项目文件夹成为python REPL中的cwd。

我花了整整一天的时间试图寻找解决此问题的方法。

首先,我认为$ PYTHONPATH存在一些问题。 我关注了SublimeREPL GitHub页面上此封闭期刊中给出的线索: https : //github.com/wuub/SublimeREPL/issues/355

并且尽管插件作者提供的解决方案不起作用,但将Packages / SublimeREPL / config / Python / Main.sublime-menu菜单中包含我工作目录路径的PYTHONPATH变量添加到了extend_env键中,可以解决导入失败的问题。

我以为自己很黄金,然后我尝试用Python读取文本文件并得到IOError。 然后终于让我知道错误的CWD(当前工作目录)是罪魁祸首。

如Python文档所指定:

“导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,则解释器将在变量sys.path给出的目录列表中搜索名为spam.py的文件。 sys.path从以下位置初始化:

  • 包含输入脚本的目录(或当前目录)
  • PYTHONPATH(目录名称列表,语法与
  • shell变量PATH)。 取决于安装的默认值。

我尝试在REPL promt中导入os打印os.getcwd() ,我肯定得到的是:

/opt/sublime_text/

那我做了什么? 解决方案是对Packages / SublimeREPL / config / Python / Main.sublime-menu (在与我所使用的REPL相对应的部分)中的一行进行简单更改。 从:

"cwd": "$file_path",

至:

"cwd": "$folder",

现在调用os.getcwd()导致到目录的路径,该目录包含我发送给SublimeREPL的文件,并且一切正常。 为什么$ file_path给出'/ opt / sublime_text'而不是文件的路径,这是插件作者的问题,还是我系统的一些潜在问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM