解决 Windows python 环境中的错误
Resolving errors in python environment on Windows
我刚开始遇到 python 的一些问题,想以正确的方式解决这个问题,作为最后的手段,如果必须的话,请重新安装。
在 Python 3 之前,我安装了 Python 2.7。然后我在旁边安装了 Python 3.7。我不记得,路径环境是自动设置的,还是我手动设置的。
我的系统变量路径包含:
C:\Python27\;C:\Python27\Scripts;
所以我相信这是自动设置的。
但是我的用户变量路径包含:
C:\Python37\;C:\Python37\Scripts;
python 安装程序会使用用户环境吗?我不确定,所以我不知道是不是我自己设置的。
但是,用户变量路径还包含:
%PYTHON_DIR%\Python37\Scripts\;%PYTHON_DIR%\Python37\;%PYTHON_DIR%\Python36\Scripts\;%PYTHON_DIR%\Python36\
同样,我不知道我是否自己设置了这个,而且我不记得在我的用户变量中设置过这个:
PYTHON_DIR = C:\Users\pcuser\AppData\Local\Programs\Python
...但它就在那里,我在该路径中有两个文件夹。
我的用户变量路径中也有这个:
PYTHON = os.path.expanduser(os.getenv('PYTHON', 'C:\Python37\python.exe'))
我知道我创建了一个 python 环境。我只需要寻找它,因为我现在不记得在哪里可以找到它。
这是我遇到的问题。
我还在 MSYS 中使用 Python,并从 C:\msys64\usr\bin 中的 Python 得到这个错误:
Could not find platform independent libraries <prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x0000000800018040 (most recent call first):
0 [main] python 1489 cygwin_exception::open_stackdumpfile: Dumping stack t
race to python.exe.stackdump
我将 PYTHONHOME 设置为 C:\msys64\usr\bin。那不能解决问题。
我还删除了 PYTHON_DIR 以查看那里是否存在冲突,但这并没有解决问题。
相反,我得到了另一个错误:
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x0000000800018040 (most recent call first):
0 [main] python 143 cygwin_exception::open_stackdumpfile: Dumping stack tr
ace to python.exe.stackdump
所以在我看来,我的 Python 环境一团糟,我想学习如何正确设置它,希望不必重新开始。
我怎样才能摆脱这些错误,并获得合适的 python 环境?
就个人而言,我使用 miniconda。
Miniconda是anaconda的缩小版,是一款优秀的环境管理器。 Miniconda 不包含图形用户界面,我觉得它更好用。
创建环境
conda create -n my-test-env python=3.9
您可以使用
激活它
conda activate my-test-env
您可以使用
安装其他包
conda install numpy
.
但是,并非所有 python 软件包都可以在 conda 中使用。您可以通过安装 pip
来安装任何 pip 包
conda install pip
pip install numpy
将PYTHONHOME
设置为C:\msys64\usr\bin
这样的值肯定是错误的;如果那是 Python 安装其库的地方,它应该类似于 C:\Python37\Lib
。但请尝试简单地取消设置。
经过一段时间的排查,我发现了问题所在。
C:\msys64\usr\lib\python3.8 中的一些文件不知何故被删除,或者 python 3.8 安装了,但没有正确安装。所以我重新安装了,python 不再抱怨缺少编码和模块。
运行 对所有 python 个安装进行测试
MINGW64 ~
# python
Python 3.8.2 (default, Feb 27 2020, 05:27:33) [GCC 9.2.0 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
# python setup_build.py install
running install
running build
running build_ext
skipping 'geotools/geotools.c' Cython extension (up-to-date)
running install_lib
copying build/lib.mingw-3.8/geotools-cpython-38.dll -> C:/msys64/mingw64/lib/python3.8/site-packages
running install_egg_info
Writing C:/msys64/mingw64/lib/python3.8/site-packages/geotools-0.1.0-py3.8.egg-info
MINGW32 ~
# python
Python 3.8.2 (default, Feb 27 2020, 06:39:26) [GCC 9.2.0 32 bit] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
# python setup_build.py install
running install
running build
running build_ext
dllwrap: WARNING: dllwrap is deprecated, use gcc -shared or ld -shared instead
skipping 'geotools/geotools.c' Cython extension (up-to-date)
running install_lib
running install_egg_info
Removing C:/msys64/mingw32/lib/python3.8/site-packages/geotools-0.1.0-py3.8.egg-info
Writing C:/msys64/mingw32/lib/python3.8/site-packages/geotools-0.1.0-py3.8.egg-info
C:\WINDOWS\system32>py -3.7 -m pip list
Package Version
----------------------------- ---------
...
C:\WINDOWS\system32>py -2.7 -m pip list
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please
upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop s
upport for Python 2.7 in January 2021. More details about Python 2 support in pi
p can be found at https://pip.pypa.io/en/latest/development/release-process/#pyt
hon-2-support pip 21.0 will remove support for this functionality.
Package Version
----------------------------- ----------
...
C:\WINDOWS\system32>python
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\WINDOWS\SYSTEM32\python27.zip', 'C:\Python27\DLLs', 'C:\Python27\
\lib', 'C:\Python27\lib\plat-win', 'C:\Python27\lib\lib-tk', 'C:\Python27
', 'C:\Users\pcUser\AppData\Roaming\Python\Python27\site-packages', 'C:\Py
thon27\lib\site-packages', 'C:\Python27\lib\site-packages\pybind11-2.6.2-p
y2.7.egg']
>>>
C:\WINDOWS\system32>py -3
Python 3.7.7 (tags/v3.7.7:d7c567b08f, Mar 10 2020, 10:41:24) [MSC v.1900 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\Users\pcUser\AppData\Local\Programs\Python\Python37\python37.zip'
, 'C:\Users\pcUser\AppData\Local\Programs\Python\Python37\DLLs', 'C:\User
s\pcUser\AppData\Local\Programs\Python\Python37\lib', 'C:\Users\pcUser\App
Data\Local\Programs\Python\Python37', 'C:\Users\pcUser\AppData\Roaming\Py
thon\Python37\site-packages', 'C:\Users\pcUser\AppData\Local\Programs\Pyth
on\Python37\lib\site-packages']
>>>
C:\WINDOWS\system32>py -3.6 -m pip list
Package Version
--------------- --------
...
我的python环境不错。一切都很好。 :)
我学到了什么...
正如许多人所建议的那样,使用 PYTHONHOME 和 PYTHONPATH 不是必需的......尽管许多人同样建议。
根据我的经验——从新手的角度来说——我不建议使用它们。
也许他们为其他人工作,但无论我如何设置,我都会出错 - 是否
C:\Python37 或
C:\Python37\lib 或
C:\Users\pcUser\AppData\Local\Programs\Python\Python37 或
C:\msys64\usr\lib\python3.8;C:\msys64\usr\lib\python3.8\site-packages;C:\msys64\usr\lib\python3.8\lib-dynload;C:\msys64\usr\lib\python3.8\distutils
它们都是 return 一个或另一个分期付款中的一堆错误。
所以它对我不起作用。但是,可能适用于其他人。
我很高兴,虽然在可能超过 60 小时后,我的 python 环境恢复正常工作。 :)
我刚开始遇到 python 的一些问题,想以正确的方式解决这个问题,作为最后的手段,如果必须的话,请重新安装。
在 Python 3 之前,我安装了 Python 2.7。然后我在旁边安装了 Python 3.7。我不记得,路径环境是自动设置的,还是我手动设置的。 我的系统变量路径包含:
C:\Python27\;C:\Python27\Scripts;
所以我相信这是自动设置的。 但是我的用户变量路径包含:
C:\Python37\;C:\Python37\Scripts;
python 安装程序会使用用户环境吗?我不确定,所以我不知道是不是我自己设置的。
但是,用户变量路径还包含:
%PYTHON_DIR%\Python37\Scripts\;%PYTHON_DIR%\Python37\;%PYTHON_DIR%\Python36\Scripts\;%PYTHON_DIR%\Python36\
同样,我不知道我是否自己设置了这个,而且我不记得在我的用户变量中设置过这个:
PYTHON_DIR = C:\Users\pcuser\AppData\Local\Programs\Python
...但它就在那里,我在该路径中有两个文件夹。
我的用户变量路径中也有这个:
PYTHON = os.path.expanduser(os.getenv('PYTHON', 'C:\Python37\python.exe'))
我知道我创建了一个 python 环境。我只需要寻找它,因为我现在不记得在哪里可以找到它。
这是我遇到的问题。 我还在 MSYS 中使用 Python,并从 C:\msys64\usr\bin 中的 Python 得到这个错误:
Could not find platform independent libraries <prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x0000000800018040 (most recent call first):
0 [main] python 1489 cygwin_exception::open_stackdumpfile: Dumping stack t
race to python.exe.stackdump
我将 PYTHONHOME 设置为 C:\msys64\usr\bin。那不能解决问题。 我还删除了 PYTHON_DIR 以查看那里是否存在冲突,但这并没有解决问题。 相反,我得到了另一个错误:
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x0000000800018040 (most recent call first):
0 [main] python 143 cygwin_exception::open_stackdumpfile: Dumping stack tr
ace to python.exe.stackdump
所以在我看来,我的 Python 环境一团糟,我想学习如何正确设置它,希望不必重新开始。 我怎样才能摆脱这些错误,并获得合适的 python 环境?
就个人而言,我使用 miniconda。
Miniconda是anaconda的缩小版,是一款优秀的环境管理器。 Miniconda 不包含图形用户界面,我觉得它更好用。
创建环境
conda create -n my-test-env python=3.9
您可以使用
激活它conda activate my-test-env
您可以使用
安装其他包conda install numpy
.
但是,并非所有 python 软件包都可以在 conda 中使用。您可以通过安装 pip
来安装任何 pip 包conda install pip
pip install numpy
将PYTHONHOME
设置为C:\msys64\usr\bin
这样的值肯定是错误的;如果那是 Python 安装其库的地方,它应该类似于 C:\Python37\Lib
。但请尝试简单地取消设置。
经过一段时间的排查,我发现了问题所在。 C:\msys64\usr\lib\python3.8 中的一些文件不知何故被删除,或者 python 3.8 安装了,但没有正确安装。所以我重新安装了,python 不再抱怨缺少编码和模块。
运行 对所有 python 个安装进行测试
MINGW64 ~
# python
Python 3.8.2 (default, Feb 27 2020, 05:27:33) [GCC 9.2.0 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
# python setup_build.py install
running install
running build
running build_ext
skipping 'geotools/geotools.c' Cython extension (up-to-date)
running install_lib
copying build/lib.mingw-3.8/geotools-cpython-38.dll -> C:/msys64/mingw64/lib/python3.8/site-packages
running install_egg_info
Writing C:/msys64/mingw64/lib/python3.8/site-packages/geotools-0.1.0-py3.8.egg-info
MINGW32 ~
# python
Python 3.8.2 (default, Feb 27 2020, 06:39:26) [GCC 9.2.0 32 bit] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
# python setup_build.py install
running install
running build
running build_ext
dllwrap: WARNING: dllwrap is deprecated, use gcc -shared or ld -shared instead
skipping 'geotools/geotools.c' Cython extension (up-to-date)
running install_lib
running install_egg_info
Removing C:/msys64/mingw32/lib/python3.8/site-packages/geotools-0.1.0-py3.8.egg-info
Writing C:/msys64/mingw32/lib/python3.8/site-packages/geotools-0.1.0-py3.8.egg-info
C:\WINDOWS\system32>py -3.7 -m pip list
Package Version
----------------------------- ---------
...
C:\WINDOWS\system32>py -2.7 -m pip list
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please
upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop s
upport for Python 2.7 in January 2021. More details about Python 2 support in pi
p can be found at https://pip.pypa.io/en/latest/development/release-process/#pyt
hon-2-support pip 21.0 will remove support for this functionality.
Package Version
----------------------------- ----------
...
C:\WINDOWS\system32>python
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\WINDOWS\SYSTEM32\python27.zip', 'C:\Python27\DLLs', 'C:\Python27\
\lib', 'C:\Python27\lib\plat-win', 'C:\Python27\lib\lib-tk', 'C:\Python27
', 'C:\Users\pcUser\AppData\Roaming\Python\Python27\site-packages', 'C:\Py
thon27\lib\site-packages', 'C:\Python27\lib\site-packages\pybind11-2.6.2-p
y2.7.egg']
>>>
C:\WINDOWS\system32>py -3
Python 3.7.7 (tags/v3.7.7:d7c567b08f, Mar 10 2020, 10:41:24) [MSC v.1900 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\Users\pcUser\AppData\Local\Programs\Python\Python37\python37.zip'
, 'C:\Users\pcUser\AppData\Local\Programs\Python\Python37\DLLs', 'C:\User
s\pcUser\AppData\Local\Programs\Python\Python37\lib', 'C:\Users\pcUser\App
Data\Local\Programs\Python\Python37', 'C:\Users\pcUser\AppData\Roaming\Py
thon\Python37\site-packages', 'C:\Users\pcUser\AppData\Local\Programs\Pyth
on\Python37\lib\site-packages']
>>>
C:\WINDOWS\system32>py -3.6 -m pip list
Package Version
--------------- --------
...
我的python环境不错。一切都很好。 :)
我学到了什么... 正如许多人所建议的那样,使用 PYTHONHOME 和 PYTHONPATH 不是必需的......尽管许多人同样建议。 根据我的经验——从新手的角度来说——我不建议使用它们。 也许他们为其他人工作,但无论我如何设置,我都会出错 - 是否 C:\Python37 或 C:\Python37\lib 或 C:\Users\pcUser\AppData\Local\Programs\Python\Python37 或 C:\msys64\usr\lib\python3.8;C:\msys64\usr\lib\python3.8\site-packages;C:\msys64\usr\lib\python3.8\lib-dynload;C:\msys64\usr\lib\python3.8\distutils
它们都是 return 一个或另一个分期付款中的一堆错误。 所以它对我不起作用。但是,可能适用于其他人。 我很高兴,虽然在可能超过 60 小时后,我的 python 环境恢复正常工作。 :)