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不是一个函数

有没有办法以非交互方式压缩大量提交?

以编程方式确定锁定工作站的持续时间?

KUBERNETES01_部署方式的变迁为什么用Kubernetes工作原理组件交互原理动画演示

KUBERNETES01_部署方式的变迁为什么用Kubernetes工作原理组件交互原理动画演示

在类中使用 ProcessPoolExecutor 时无法腌制协程对象