解决 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 环境恢复正常工作。 :)