这大概与Python produces: OSError: [WinError 193] %1 is not a valid Win32 application相同,但是没有答案,我还针对我的情况提供了其他详细信息。
背景:
我正在使用venv,它通过activate_this.py
在内部通过以下方式激活:
exec(compile(open(venv_script, "rb").read(), venv_script, 'exec'), dict(__file__=venv_script))
这至少在python2上有效...
当我导入numpy时,我得到:
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Dropbox (CEP)\venvs\win\CYAN\Lib\site-packages\numpy\__init__.py", line 142, in <module>
from . import core
File "C:\Dropbox (CEP)\venvs\win\CYAN\Lib\site-packages\numpy\core\__init__.py", line 23, in <module>
WinDLL(os.path.abspath(filename))
File "C:\Python37\lib\ctypes\__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
如果我正常激活venv,我可以导入numpy fine,所以我猜问题出在我如何使用activate_this.py
...
最小情况:
C:\Dropbox (CEP)\venvs>virtualenv testEnv
Using base prefix 'c:\\users\\brianp\\appdata\\local\\programs\\python\\python37-32'
New python executable in C:\DROPBO~1\venvs\testEnv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.
C:\Dropbox (CEP)\venvs>testEnv\Scripts\activate
(testEnv) C:\Dropbox (CEP)\venvs>pip install numpy
Collecting numpy
Using cached https://files.pythonhosted.org/packages/61/be/b4d697563d4a211596a350414a87612204a8bb987c4c1b34598cd4904f55/numpy-1.16.2-cp37-cp37m-win32.whl
Installing collected packages: numpy
Successfully installed numpy-1.16.2
(testEnv) C:\Dropbox (CEP)\venvs>deactivate
C:\Dropbox (CEP)\venvs>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> this_file = 'testenv/Scripts/activate_this.py'
>>> exec(open(this_file).read(), {'__file__': this_file})
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Dropbox (CEP)\venvs\testenv\Lib\site-packages\numpy\__init__.py", line 142, in <module>
from . import core
File "C:\Dropbox (CEP)\venvs\testenv\Lib\site-packages\numpy\core\__init__.py", line 23, in <module>
WinDLL(os.path.abspath(filename))
File "C:\Python37\lib\ctypes\__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
>>> exit()
C:\Dropbox (CEP)\venvs>testEnv\Scripts\activate
(testEnv) C:\Dropbox (CEP)\venvs>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>
答案 0 :(得分:1)
这是一个众所周知的错误:这是架构不匹配( 32bit / 64bit ),在您的情况下,尝试加载 32bit < em> .dll 在 64bit 进程中。为了清楚起见, numpy 包含一堆 .dll ,这些文件在导入时会在当前进程中加载。
问题中的示例是扭曲且难以阅读的:一些有效的示例,然后一些不起作用,然后又重新起作用,依此类推(例如,我什至不知道2是什么) 代码段的目的),而不是将有效的方案与无效的方案明确分开。
尽管如此,我仍然能够找出问题所在。
您创建(并安装了 numpy )的 testEnv 环境为 32bit :< / p>
3 rd 片段(开始):
Using base prefix 'c:\users\brianp\appdata\local\programs\python\python37-32'
3 rd 片段(结束):
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32
import numpy
有效(并且 numpy (及其包含的 .dll s))为 32bit )从外部启动的 Python 解释器为 64bit
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
sys.path
)和import numpy
从 testEnv 中选择 32bit 版本,显然失败了要摆脱此错误,您可以选择(列出一些可能的选项):
C:\Dropbox (CEP)\venvs>python
)外部使用 32位 Python 答案 1 :(得分:0)
可能发生了另一件事。 VS code
从预定义的操作系统位置自动搜索numpy和其他软件包。它可能发现了32 bit
的{{1}}版本而不是numpy
版本。
固定:
从所有操作系统位置卸载64 bit
*在numpy
中。输入VS code terminal
或pip uninstall numpy
(如果使用conda uninstall numpy
)
*重新启动VS代码
*瞧! (如果问题仍然存在,请重新安装numpy)