在Windows上删除和重新安装Python Sphinx



我正在尝试使用Python(3.8)和Sphinx(3.3.1)来构建HTML文档。但是,sphinx-build命令会给我以下错误:

C:UsersMeDropboxKuchen>sphinx-build -b html source build
Running Sphinx v3.3.1
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 1 source files that are out of date
updating environment: 0 added, 1 changed, 0 removed
reading sources... [100%] kaesekuchen
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] kaesekuchen
generating indices... genindex done
writing additional pages... search done
copying static files... WARNING: Failed to copy a file in html_static_file: c:usersmeappdatalocalprogramspythonpython38libsite-packagessphinxthemesbasicstatic/jquery-3.5.1.js: PermissionError(13, 'Permission denied')
WARNING: Failed to copy a file in html_static_file: c:usersmeappdatalocalprogramspythonpython38libsite-packagessphinxthemesbasicstatic/jquery.js: PermissionError(13, 'Permission denied')
done
copying extra files... done
dumping search index in English (code: en)... done
dumping object inventory... done
build succeeded, 2 warnings.

然而,

  1. build中的HTML文件kaesekuchen不会更新/更改
  2. 文件夹c:usersmeappdatalocalprogramspythonpython38libsite-packagessphinx不存在

后者是我的错,因为我在文件资源管理器中删除了它,但只是因为我之前遇到了完全相同的错误,希望删除并重新安装Sphinx可以解决它。

相反,命令pip uninstall sphinx和随后的pip install -U sphinx不会更改该文件夹中的任何内容,并且后者只提供以下乐观输出,而不考虑以下输出:

Microsoft Windows [Version 10.0.18363.1198]
(c) 2019 Microsoft Corporation. All rights reserved.
C:Usersme>pip uninstall sphinx
Found existing installation: Sphinx 3.3.1
Uninstalling Sphinx-3.3.1:
Would remove:
c:usersmeappdatalocalprogramspythonpython38libsite-packagessphinx-3.3.1.dist-info*
c:usersmeappdatalocalprogramspythonpython38libsite-packagessphinx*
c:usersmeappdatalocalprogramspythonpython38scriptssphinx-apidoc.exe
c:usersmeappdatalocalprogramspythonpython38scriptssphinx-autogen.exe
c:usersmeappdatalocalprogramspythonpython38scriptssphinx-build.exe
c:usersmeappdatalocalprogramspythonpython38scriptssphinx-quickstart.exe
Proceed (y/n)? y
Successfully uninstalled Sphinx-3.3.1
C:Usersme>pip install -U sphinx
Collecting sphinx
Using cached Sphinx-3.3.1-py3-none-any.whl (2.9 MB)
Requirement already satisfied, skipping upgrade: docutils>=0.12 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (0.16)
Requirement already satisfied, skipping upgrade: sphinxcontrib-serializinghtml in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.1.4)
Requirement already satisfied, skipping upgrade: snowballstemmer>=1.1 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (2.0.0)
Requirement already satisfied, skipping upgrade: alabaster<0.8,>=0.7 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (0.7.12)
Requirement already satisfied, skipping upgrade: setuptools in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (41.2.0)
Requirement already satisfied, skipping upgrade: colorama>=0.3.5; sys_platform == "win32" in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (0.4.4)
Requirement already satisfied, skipping upgrade: sphinxcontrib-jsmath in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.0.1)
Requirement already satisfied, skipping upgrade: babel>=1.3 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (2.9.0)
Requirement already satisfied, skipping upgrade: imagesize in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.2.0)
Requirement already satisfied, skipping upgrade: sphinxcontrib-devhelp in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.0.2)
Requirement already satisfied, skipping upgrade: sphinxcontrib-qthelp in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.0.3)
Requirement already satisfied, skipping upgrade: Jinja2>=2.3 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (2.11.2)
Requirement already satisfied, skipping upgrade: sphinxcontrib-applehelp in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.0.2)
Requirement already satisfied, skipping upgrade: requests>=2.5.0 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (2.25.0)
Requirement already satisfied, skipping upgrade: packaging in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (20.4)
Requirement already satisfied, skipping upgrade: sphinxcontrib-htmlhelp in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (1.0.3)
Requirement already satisfied, skipping upgrade: Pygments>=2.0 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from sphinx) (2.7.2)
Requirement already satisfied, skipping upgrade: pytz>=2015.7 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from babel>=1.3->sphinx) (2020.4)
Requirement already satisfied, skipping upgrade: MarkupSafe>=0.23 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from Jinja2>=2.3->sphinx) (1.1.1)
Requirement already satisfied, skipping upgrade: urllib3<1.27,>=1.21.1 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from requests>=2.5.0->sphinx) (1.26.2)
Requirement already satisfied, skipping upgrade: idna<3,>=2.5 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from requests>=2.5.0->sphinx) (2.10)
Requirement already satisfied, skipping upgrade: certifi>=2017.4.17 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from requests>=2.5.0->sphinx) (2020.11.8)
Requirement already satisfied, skipping upgrade: chardet<4,>=3.0.2 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from requests>=2.5.0->sphinx) (3.0.4)
Requirement already satisfied, skipping upgrade: six in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from packaging->sphinx) (1.15.0)
Requirement already satisfied, skipping upgrade: pyparsing>=2.0.2 in c:usersmeappdatalocalprogramspythonpython38libsite-packages (from packaging->sphinx) (2.4.7)
Installing collected packages: sphinx
Successfully installed sphinx-3.3.1

但是文件夹c:usersmeappdatalocalprogramspythonpython38libsite-packagessphinx仍然不在那里。

我甚至尝试使用sphinx-quickstart:从头开始运行一个新的Sphinx项目

For a list of supported codes, see
https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-language.
> Project language [en]: en
Creating file C:UsersmeDropboxKuchentestsourceconf.py.
Creating file C:UsersmeDropboxKuchentestsourceindex.rst.
Creating file C:UsersmeDropboxKuchentestMakefile.
Creating file C:UsersmeDropboxKuchentestmake.bat.
Finished: An initial directory structure has been created.
You should now populate your master file C:UsersmeDropboxKuchentestsourceindex.rst and create other documentation
source files. Use the Makefile to build the docs, like so:
make builder
where "builder" is one of the supported builders, e.g. html, latex or linkcheck.

但是,尽管有这样的输出,却没有创建这样的文件或source文件夹。

我能做些什么来干净地重置我的Sphinx安装并让我的文档再次运行?

解决这个问题需要一个有点尴尬的解释,它同时取决于:操作系统(Windows)、您的特定安装以及您如何执行Sphinx。

在Windows上,你可以在不同的地方安装几个Python(取决于…):

一个常见的位置是C:Program FilesPython3x
  • 预先配置的默认路径为C:UsersmeAppDataLocalProgramsPythonPython3.x。我觉得这很不方便,因为它离根部很远。

  • 当前流行的扩展Python安装的方法是使用虚拟环境(venv)。

    1. 您的venv,无论您决定将其放置在何处。(使用venv被认为是"事实上的">最佳实践。)

    在某个时间点,您将PYTHONPATH设置为Windows上的环境变量,Windows将在这些路径中查找Python安装。请注意"模块搜索路径"的规则。现在的问题是,如果您在Path上设置了多个Python安装,Windows也会在其他安装中查找库。。。

    (关于在Windows上安装Python的一般说明是必要的。2019年的某个时候,微软将Python包含在Windows中-正如一位著名的SO用户在本回复中所指出的,并在文档中提到的那样。大约在那个时候,Windows出现了一个错误,要求使用管理员帐户设置环境变量-我找不到参考资料,但SO上的某个地方提到了它。这意味着建议您单独安装Python并将环境变量设置为admin。)



    话虽如此,您描述的问题有几个方面(请特别注意您使用的终端):

    sphinx-build中的第一条警告表明Sphinx正试图从用户帐户安装中读取文件(以上第2点)。问题是执行sphinx-build的终端没有从用户帐户安装目录中读取的权限,因为该终端是在不同的用户帐户下运行的,或者因为帐户安装路径没有设置读取权限。。。话虽如此,请重新考虑警告:

    正在复制静态文件。。。警告:无法复制html_static_file:c:\users\me\appdata\local\programs\python38\lib\site packages\sphinx\themes\basic\static/jquery-3.5.1.js:PermissionError(13,"拒绝权限")中的文件

    警告:无法复制html_static_file:c:\users\me\appdata\local\programs\python38\lib\site packages\sphinx\themes\basic\static/jquery.js:PermissionError(13,"拒绝权限")中的文件

    也可能是您从帐户安装中删除了Sphinx,而文件/路径根本不存在。

    接下来,当您尝试使用pip重新安装Sphinx时,还不完全清楚这是一个过时的缓存问题,还是pip在您的PYTHONPATH上的另一个安装中找到了Sphinx。。。可能是安装了Sphinx,而终端根本没有读/写权限(取决于调用终端的用户帐户),或者目录可能隐藏在文件资源管理器中。。。

    我能做些什么来干净地重置我的Sphinx安装并让我的文档再次运行?

    您的Python基础安装(上面的第1点和第2点)应该只针对系统或用户范围的更改(而不是针对特定的项目更改)进行编写。

    强烈建议您使用venv。(如果你以前没有,现在是考虑这样做的合适时机,因为这是最简单、最干净的解决方案)。这一点最初看起来可能令人困惑,因为历史上有几个Python的虚拟环境。目前,venv是最常被引用的解决方案,使用它很简单,您的IDE应该有一个内置的UI,只需点击几下即可帮助您创建它。

    venv是一个扩展基本安装的Python环境,当您必须进行特定于项目的更改时,它避免了更改基本安装的需要(比如安装了Sphinx,理想情况下应该在venv上,而不是在基本安装上。)

    最后,当您从终端运行Sphinx时,建议在终端上激活venv,否则执行的Python安装可能取决于调用终端的用户帐户。

    最新更新