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。但是,>>> py3.6
给了我py3.6 is not recognized as an internal or external command
,但这是一个单独的问题。复选标记是你的...
我冒昧地编辑了您的回复:py -3.6 foo.py
似乎是正确的语法。现在一切正常——谢谢。以上是关于python import 以交互方式工作,但不是来自脚本的主要内容,如果未能解决你的问题,请参考以下文章