python导入以交互方式工作,但不从脚本进行

python导入以交互方式工作,但不从脚本进行,python,windows,python-module,Python,Windows,Python Module,免责声明:我不是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>

免责声明:我不是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
(FWIW,在Mac OS X下重复此操作时,我没有收到错误。)


有什么想法吗?

问题很可能是python的版本不同,安装了不同的模块。要解决这个问题,您只需执行
py-3.6foo.py
而不是
py foo.py

工作目录


我遇到过这样一种情况:脚本从它的工作目录导入,shell从全局库导入。

Aha!你说得对:在foo.py中打印sys.version会显示v2.7.14。但是,
>>py3.6
给了我
py3.6没有被识别为内部或外部命令
,但这是一个单独的问题。选中标记是你的…我冒昧地编辑了你的回复:
py-3.6foo.py
似乎是正确的语法。现在一切都好了——谢谢。通过使用shebang
#/usr/bin/env python
,您正在使用python.exe的启动程序搜索路径。将shebang更改为
#/usr/bin/python3
或只是
#!python3
强制启动程序使用已安装的最高版本的3.x。@eryksun:谢谢-这解释了为什么script vs interactive运行不同版本。
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
>>>