为什么从 python 调用 *.py 文件时 Python 导入会成功,但仅通过文件名调用时却不会
Why would a Python import succeed when invoking *.py file from python but not when invoked by file name alone
我正处于整合一些 Python 以在 Matlab 中调用一些计算并将所有数字汇总到 html 代中的早期阶段,我将在 ll.xist.我最初安装了 Python 2.7.5 32 位,但是安装了 64 位 Matlab R2015a 我无法 install the matlab engine for that version of python. I then downloaded a 64bit version of Python 2.7.9 and tried to do a pip into ll-xist, which was apparently not well maintained and failed. I then downloaded Python 3.4.3 64bit, downloaded the ll.xist installer ll-xist-5.13.win-amd64-py3.4.exe,我认为我可以继续了。我不得不做一个 pip 来拉入 cssutils,它成功了。
现在我要从控制台调用我的 python 文件。 如果我在 python
之前调用它,一切正常,如果我不这样做,则无法识别导入 。什么可以解释这种差异?看起来我安装的各个版本之间存在一些安装问题,路径上的 python 版本没有被正确调用,我猜正在调用 python 的 2.7.9 版本不知何故,因为那个安装从未安装过 ll.xist,尽管我的 2.7.5 安装了。
C:\Temp>python MyScript.py a.txt b.txt
file1: a.txt
file2: b.txt
C:\Temp>MyScript.py a.txt b.txt
Traceback (most recent call last):
File "C:\Temp\MyScript.py", line 20, in <module>
from ll.xist import xsc
ImportError: No module named ll.xist
这也是一个健全性检查...
C:\Temp>python
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
C:\Temp>which python
/cygdrive/c/Python34/python
检查 .py 的文件关联。虽然正确的安装可能在您的路径中,但文件关联可能仍指向不同的版本。
您可以通过在测试脚本中导入 sys
模块并调用 print(sys.version)
来检查这一点。然后 运行 带有 python test.py
和 test.py
的测试脚本,以查看打印了哪些版本。
原来这里的管理问题是所谓的 Python Launcher for Windows。
3.4. Python Launcher for Windows New in version 3.3.
The Python launcher for Windows is a utility which aids in the
location and execution of different Python versions. It allows scripts
(or the command-line) to indicate a preference for a specific Python
version, and will locate and execute that version.
在我的控制台中,我可以通过 py 命令看到 "default" 版本...
C:\Users\me>py
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
C:\Users\me>py -3
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
这是基本修复...
The key benefit of this is that a single launcher can support multiple
Python versions at the same time depending on the contents of the
first line.
在我的案例中,我必须添加到我的脚本中的第一行是
#! python3
有关 Launcher 背后的详细信息和动机的精彩评论链接 here。
我正处于整合一些 Python 以在 Matlab 中调用一些计算并将所有数字汇总到 html 代中的早期阶段,我将在 ll.xist.我最初安装了 Python 2.7.5 32 位,但是安装了 64 位 Matlab R2015a 我无法 install the matlab engine for that version of python. I then downloaded a 64bit version of Python 2.7.9 and tried to do a pip into ll-xist, which was apparently not well maintained and failed. I then downloaded Python 3.4.3 64bit, downloaded the ll.xist installer ll-xist-5.13.win-amd64-py3.4.exe,我认为我可以继续了。我不得不做一个 pip 来拉入 cssutils,它成功了。
现在我要从控制台调用我的 python 文件。 如果我在 python
之前调用它,一切正常,如果我不这样做,则无法识别导入 。什么可以解释这种差异?看起来我安装的各个版本之间存在一些安装问题,路径上的 python 版本没有被正确调用,我猜正在调用 python 的 2.7.9 版本不知何故,因为那个安装从未安装过 ll.xist,尽管我的 2.7.5 安装了。
C:\Temp>python MyScript.py a.txt b.txt
file1: a.txt
file2: b.txt
C:\Temp>MyScript.py a.txt b.txt
Traceback (most recent call last):
File "C:\Temp\MyScript.py", line 20, in <module>
from ll.xist import xsc
ImportError: No module named ll.xist
这也是一个健全性检查...
C:\Temp>python
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
C:\Temp>which python
/cygdrive/c/Python34/python
检查 .py 的文件关联。虽然正确的安装可能在您的路径中,但文件关联可能仍指向不同的版本。
您可以通过在测试脚本中导入 sys
模块并调用 print(sys.version)
来检查这一点。然后 运行 带有 python test.py
和 test.py
的测试脚本,以查看打印了哪些版本。
原来这里的管理问题是所谓的 Python Launcher for Windows。
3.4. Python Launcher for Windows New in version 3.3.
The Python launcher for Windows is a utility which aids in the location and execution of different Python versions. It allows scripts (or the command-line) to indicate a preference for a specific Python version, and will locate and execute that version.
在我的控制台中,我可以通过 py 命令看到 "default" 版本...
C:\Users\me>py
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
C:\Users\me>py -3
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
这是基本修复...
The key benefit of this is that a single launcher can support multiple Python versions at the same time depending on the contents of the first line.
在我的案例中,我必须添加到我的脚本中的第一行是
#! python3
有关 Launcher 背后的详细信息和动机的精彩评论链接 here。