【问题标题】:Resolving errors in python environment on Windows解决Windows上python环境中的错误
【发布时间】:2021-03-06 12:36:02
【问题描述】:

我刚开始遇到 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环境?

【问题讨论】:

  • PYTHON = os.path.expanduser(os.getenv('PYTHON', 'C:\\Python37\\python.exe')) 肯定看起来不对;你到底在哪里有这个?
  • 这是在我的用户变量中。我相信它是由程序设置的,因为我不知道该怎么做。
  • 您的意思是在您的 Windows 环境中?你不能把 Python 代码放在那里,只能放静态文本。
  • 我确定不是我做的,所以我想如果一个程序把它放在那里,它一定知道它在做什么。
  • 我仍然不确定我是否正确理解“我的用户变量”的意思。

标签: python msys2


【解决方案1】:

就我个人而言,我使用miniconda

Miniconda 是 anaconda 的小版本,是一个优秀的环境管理器。 Miniconda 不包含 gui,我觉得使用起来更好。

创建环境

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

【讨论】:

  • 感谢您的建议,但我已经安装了 miniconda,并且在我的外部驱动器上创建了一个环境,并使用 pip 安装了一些我无法在我的系统上的 Python 版本上安装的软件包.但是,我最近不得不卸载 miniconda,因为它有问题,请参阅此链接 - stackoverflow.com/questions/66462998/… 我计划稍后再试一次。我会在这里看看情况如何。
【解决方案2】:

PYTHONHOME 设置为C:\msys64\usr\bin 这样的值肯定是错误的;它应该类似于C:\Python37\Lib,如果那是 Python 安装它的库的地方。但是尝试简单地取消它。

【讨论】:

  • 我已经把它放在了路径中,因为我更喜欢这样。可以吗。我认为它做同样的工作。
  • 不确定这意味着什么。您将C:Python37\Lib 添加到PATH?可能不这样做,即使不知何故似乎工作。 PATH 的目的是告诉 Windows 在哪里寻找可执行文件。
  • 好吧,我实际上并没有将 C:Python37\Lib 放在路径中。我把 msys 放了一个,但是,两者都没有解决问题。我认为我走在正确的道路上,而且我相信我之前的 miniconda 安装是罪魁祸首。我相信它在需要 python 3.8 模块的注册表中留下了一些残留物。我正在找出问题所在。
  • 我的意思是两者都不起作用,是 PYTHONHOME 中的 C:Python37\Lib 不能解决问题。另外,修正python 3.9是miniconda使用的,python正在寻找的模块在cpython中。
  • 好的。我弄清楚了你的意思,并编辑了标题。非常感谢。
【解决方案3】:

经过一段时间的故障排除后,我能够发现问题出在哪里。 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

它们都在某一部分或另一部分中返回一堆错误。 所以它对我不起作用。但是,可能对其他人有用。 我很高兴在大约 60 多个小时后,我的 python 环境恢复了正常工作。 :)

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2021-10-12
    • 1970-01-01
    • 2012-07-14
    • 2019-11-13
    • 2023-04-10
    相关资源
    最近更新 更多