我在64位Window 7上尝试在同一系统上使用Anaconda Python 64位和32位发行版。
我希望能够构建用于分发的Windows 32位可执行文件(使用py2exe),这需要使用32位python解释器。我之前已经将Anaconda Python 64位安装到C:\ Anaconda。我现在已经将32位Anaconda Python发行版安装到C:\ Anaconda32。但是,当我尝试从C:\ Anaconda32 \ python.exe运行python解释器时,它将64位环境加载到我的sys.path中。结果是许多库调用由于32位进程尝试执行64位库而失败(我认为)。
我还尝试编辑cmd.exe会话中的路径,只包含C:\ Anaconda32和C:\ Anaconda32 \ Scripts。
结果如下:
C:\Anaconda32>echo %path%
C:\Anaconda32;C:\Anaconda32\Scripts
C:\Anaconda32>python.exe
Python 2.7.7 |Anaconda 2.0.1 (64-bit)| (default, Jun 11 2014, 10:41:43) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> import sys
>>> sys.executable
'C:\\Anaconda32\\python.exe'
>>> sys.path
['', 'C:\\Anaconda32\\python27.zip', 'C:\\Anaconda\\DLLs', 'C:\\Anaconda\\lib', 'C:\\Anaconda\\lib\\plat-win', 'C:\\Anaconda\\lib\\lib-tk', 'C:\\Anaco
nda32', 'C:\\Anaconda', 'C:\\Anaconda\\lib\\site-packages', 'C:\\Anaconda\\lib\\site-packages\\PIL', 'C:\\Anaconda\\lib\\site-packages\\win32', 'C:\\A
naconda\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda\\lib\\site-packages\\runipy-0.1.0-py2.7.egg', '
C:\\Anaconda\\lib\\site-packages\\setuptools-3.6-py2.7.egg']
>>>
C:\Anaconda\DLLs
,C:\Anaconda\lib
等是问题所在。那些应该是C:\Anaconda32\*
......
我还想指出,虽然稍后在该行上显示Anaconda 2.0.1 (64-bit)
,但它具有编译器信息:[MSC v.1500 32 bit (Intel)]
,表示正在运行32位解释器。对sys.executable
的调用也表明正确的解释器正在运行。
这是尝试加载大多数模块时的结果。:
>>> import numpy as np
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda\lib\site-packages\numpy\__init__.py", line 168, in <module>
from . import add_newdocs
File "C:\Anaconda\lib\site-packages\numpy\add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "C:\Anaconda\lib\site-packages\numpy\lib\__init__.py", line 8, in <module>
from .type_check import *
File "C:\Anaconda\lib\site-packages\numpy\lib\type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "C:\Anaconda\lib\site-packages\numpy\core\__init__.py", line 6, in <module>
from . import multiarray
ImportError: DLL load failed: %1 is not a valid Win32 application.
>>>
ImportError: DLL load failed: %1 is not a valid Win32 application.
是在尝试从32位解释器加载64位编译模块时发生的事情。我相信。
如何设置32位环境以便加载32位库?我希望我的64位主安装不受影响(当我键入python
时保持默认值)
谢谢!
修改
This site显示了一个32位anaconda 2.0.1解释器应该是什么样子的例子......
Python 2.7.7 |Anaconda 2.0.1 (32-bit)| (default, Jun 11 2014, 10:41:43) [MSC v.1500 32 bit (Intel)]
所以我有|Anaconda 2.0.1 (64-bit)|
和[MSC v.1500 32 bit (Intel)]
的事实意味着某些事情是非常错误的......
答案 0 :(得分:2)
我相信我的PYTHONHOME环境变量设置为C:\ Anaconda(64位安装)。当我尝试运行C:\ Anaconda32 \ python.exe时,它看到了PYTHONHOME变量,并尝试将该目录用作从中加载库的位置。这在Python文档here中有解释。
通过删除PYTHONHOME,我可以并排运行Anaconda 32位和64位。在命令提示符下键入python
时,将自动运行在我的路径中首先出现的任何一个。当我打开任何一个解释器时,我会得到正确的版本和位信息,并加载正确的库。另外,因为我选择在安装过程中将每个设置为默认python,所以设置了32位和64位python注册表项,允许安装程序找到相应的安装。
如果你想并排使用多个版本的Python,我建议你删除PYTHONHOME和PYTHONPATH,如果你不需要它们来避免不同安装之间的环境冲突。我可能在这里错了,但这似乎解决了我的问题。
完全明确我安装到C:\ Anaconda32和C:\ Anaconda64。这样,如果我看到只有C:\ Anaconda的东西,我知道这是不正确的。