python import 以交互方式工作,但不是来自脚本

Posted

技术标签:

【中文标题】python import 以交互方式工作,但不是来自脚本【英文标题】:python import works interactively but not from script 【发布时间】:2018-07-02 05:18:02 【问题描述】:

免责声明:我不是 Windows 专家,所以这可能是 Windows 特有的东西。

我观察到一种情况,我可以在交互模式下导入模块,但不能在从文件请求时导入。这是foo.py的全部内容:

#!/usr/bin/env python
import pyftdi

当我尝试在 Python 3.6.4 中运行它时,它失败了:

E:\>py foo.py
Traceback (most recent call last):
  File "foo.py", line 2, in <module>
    import pyftdi
ImportError: No module named pyftdi

...但是当我以交互方式导入模块时,它成功了:

E:\>py
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyftdi
>>>

(FWIW,在 Mac OS X 下重复此操作时我没有收到错误。)

有什么想法吗?

【问题讨论】:

通过使用shebang #!/usr/bin/env python,您可以在启动器中搜索PATH 以查找python.exe。将 shebang 更改为 #!/usr/bin/python3 或只是 #!python3 以强制启动器使用已安装的 3.x 的最高版本。 @eryksun:谢谢 - 这解释了为什么脚本与交互式运行不同的版本。 【参考方案1】:

工作目录

我遇到过脚本从其工作目录导入而 shell 从全局库导入的情况。

【讨论】:

【参考方案2】:

问题很可能是python的版本不同,安装的模块不同。要解决此问题,您只需使用 py -3.6 foo.py 而不是 py foo.py

【讨论】:

啊哈!你是对的:在 foo.py 中打印 sys.version 显示 v 2.7.14。但是,&gt;&gt;&gt; py3.6 给了我py3.6 is not recognized as an internal or external command,但这是一个单独的问题。复选标记是你的... 我冒昧地编辑了您的回复:py -3.6 foo.py 似乎是正确的语法。现在一切正常——谢谢。

以上是关于python import 以交互方式工作,但不是来自脚本的主要内容,如果未能解决你的问题,请参考以下文章

this.context.toggle不是一个函数

在 Sublime Text 2 中以交互方式运行 Python

怎么测试python模块安装成功

msys 没有以交互方式打开程序

Python 的几个命令行参数

菜鸟学Python Day1.4(导入模块Import用户交互Raw_input)