这可能与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))
这至少对Python有效。。。在
当我导入numpy时,我得到:
^{pr2}$如果我正常激活venv,我可以很好地导入numpy,所以我猜问题是我如何使用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
>>>
可能发生了另一件事。
VS code
自动从预定义的操作系统位置搜索numpy和其他包。它可能发现了32 bit
的numpy
版本,而不是64 bit
版本。 修复: {3>从所有位置卸载} *在VS code terminal
中。键入pip uninstall numpy
或conda uninstall numpy
(如果使用Anaconda
) *重新启动VS代码 *喂!(如果问题仍然存在,请重新安装numpy)这是一个众所周知的错误:这是一个架构不匹配(32bit/64bit),在您的例子中,试图在64bit进程中加载32bit.dll。为了清楚起见,numpy包含一堆.dll的文件,这些文件在导入当前进程时加载到当前进程中。在
这个问题中的例子是扭曲的,很难阅读:有些是有效的,有些是不起作用的,然后是一些再次起作用的例子,等等(例如,我甚至不知道2nd片段的目的是什么),而不是清楚地将有用的场景与不起作用的场景分开
不管怎么说,尽管有上述情况,我还是能够找出问题所在。在
您创建(并安装numpy的testEnv环境是32bit:
3rd片段(开始):
3rd片段(结束):
import numpy
有效(并且numpy(以及它包含的.dll是32位)从外部启动的Python解释器是64位
sys.path
),并且import numpy
从testEnv中选择32位版本,这显然失败了您可以删除其中一个选项:
C:\Dropbox (CEP)\venvs>python
)相关问题 更多 >
编程相关推荐