1335 lines
98 KiB
HTML
1335 lines
98 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
|
||
<title>安装Python模块(旧版) — Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/language_data.js"></script>
|
||
<script src="../_static/translations.js"></script>
|
||
|
||
<script src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="在 Python 3.8.20 文档 中搜索"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="关于这些文档" href="../about.html" />
|
||
<link rel="index" title="索引" href="../genindex.html" />
|
||
<link rel="search" title="搜索" href="../search.html" />
|
||
<link rel="copyright" title="版权所有" href="../copyright.html" />
|
||
<link rel="prev" title="9. API参考引用" href="../distutils/apiref.html" />
|
||
<link rel="canonical" href="https://docs.python.org/3/install/index.html" />
|
||
|
||
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/menu.js"></script>
|
||
|
||
</head>
|
||
<body>
|
||
<div class="mobile-nav">
|
||
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
|
||
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
|
||
<label for="menuToggler" class="toggler__label">
|
||
<span></span>
|
||
</label>
|
||
<nav class="nav-content" role="navigation">
|
||
<a href="https://www.python.org/" class="nav-logo">
|
||
<img src="../_static/py.svg" alt="Logo"/>
|
||
</a>
|
||
<div class="version_switcher_placeholder"></div>
|
||
<form role="search" class="search" action="../search.html" method="get">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
|
||
<path fill-rule="nonzero"
|
||
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
|
||
</svg>
|
||
<input type="text" name="q" aria-label="快速搜索"/>
|
||
<input type="submit" value="转向"/>
|
||
</form>
|
||
</nav>
|
||
<div class="menu-wrapper">
|
||
<nav class="menu" role="navigation" aria-label="main navigation">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<h3><a href="../contents.html">目录</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#">安装Python模块(旧版)</a><ul>
|
||
<li><a class="reference internal" href="#introduction">概述</a><ul>
|
||
<li><a class="reference internal" href="#distutils-based-source-distributions">基于 <code class="docutils literal notranslate"><span class="pre">distutils</span></code> 的源代码分发</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#standard-build-and-install">标准构建及安装</a><ul>
|
||
<li><a class="reference internal" href="#platform-variations">平台差异</a></li>
|
||
<li><a class="reference internal" href="#splitting-the-job-up">拆分任务</a></li>
|
||
<li><a class="reference internal" href="#how-building-works">How building works</a></li>
|
||
<li><a class="reference internal" href="#how-installation-works">How installation works</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#alternate-installation">可选安装形式</a><ul>
|
||
<li><a class="reference internal" href="#alternate-installation-the-user-scheme">可选安装形式:用户方案</a></li>
|
||
<li><a class="reference internal" href="#alternate-installation-the-home-scheme">可选安装形式:家目录方案</a></li>
|
||
<li><a class="reference internal" href="#alternate-installation-unix-the-prefix-scheme">可选安装形式:Unix(前缀方案)</a></li>
|
||
<li><a class="reference internal" href="#alternate-installation-windows-the-prefix-scheme">Alternate installation: Windows (the prefix scheme)</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#custom-installation">自定义安装</a><ul>
|
||
<li><a class="reference internal" href="#modifying-python-s-search-path">修改 Python 的搜索路径</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#distutils-configuration-files">Distutils 配置文件Configuration Files</a><ul>
|
||
<li><a class="reference internal" href="#location-and-names-of-config-files">Location and names of config files</a></li>
|
||
<li><a class="reference internal" href="#syntax-of-config-files">Syntax of config files</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#building-extensions-tips-and-tricks">Building Extensions: Tips and Tricks</a><ul>
|
||
<li><a class="reference internal" href="#tweaking-compiler-linker-flags">Tweaking compiler/linker flags</a></li>
|
||
<li><a class="reference internal" href="#using-non-microsoft-compilers-on-windows">在 Windows 上使用非 Microsoft 编辑器</a><ul>
|
||
<li><a class="reference internal" href="#borland-codegear-c">Borland/CodeGear C++</a></li>
|
||
<li><a class="reference internal" href="#gnu-c-cygwin-mingw">GNU C / Cygwin / MinGW</a><ul>
|
||
<li><a class="reference internal" href="#older-versions-of-python-and-mingw">旧版 Python 和 MinGW</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="../distutils/apiref.html"
|
||
title="上一章"><span class="section-number">9. </span>API参考引用</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/install/index.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
|
||
这个文档所针对的是一个已不再受支持的 Python 旧版本。
|
||
你应当升级版本,并阅读
|
||
<a href="/3/install/index.html"> Python 当前稳定版本的文档</a>.
|
||
</div>
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
accesskey="I">索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="../distutils/apiref.html" title="9. API参考引用"
|
||
accesskey="P">上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section id="installing-python-modules-legacy-version">
|
||
<span id="install-index"></span><h1>安装Python模块(旧版)<a class="headerlink" href="#installing-python-modules-legacy-version" title="永久链接至标题">¶</a></h1>
|
||
<dl class="field-list simple">
|
||
<dt class="field-odd">作者</dt>
|
||
<dd class="field-odd"><p>Greg Ward</p>
|
||
</dd>
|
||
</dl>
|
||
<div class="admonition seealso">
|
||
<p class="admonition-title">参见</p>
|
||
<dl class="simple">
|
||
<dt><a class="reference internal" href="../installing/index.html#installing-index"><span class="std std-ref">安装 Python 模块</span></a></dt><dd><p>最新的模块安装文档。对于常规Python使用,你几乎肯定像使用该文档而非这个。</p>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>这篇文档是历史遗留文档,在 <a class="reference external" href="https://setuptools.readthedocs.io/en/latest/setuptools.html">https://setuptools.readthedocs.io/en/latest/setuptools.html</a> 上的 <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。</p>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>本指南仅介绍构建和分发扩展的基本工具,这些扩展是作为此Python版本的一部分提供的。 第三方工具提供更易于使用和更安全的替代方案。有关详细信息,请参阅 Python 打包用户指南中的 <a class="reference external" href="https://packaging.python.org/guides/tool-recommendations/">快速推荐部分</a> 。</p>
|
||
</div>
|
||
<section id="introduction">
|
||
<span id="inst-intro"></span><h2>概述<a class="headerlink" href="#introduction" title="永久链接至标题">¶</a></h2>
|
||
<p>在Python 2.0中,<code class="docutils literal notranslate"><span class="pre">distutils</span></code> API 首次被添加到标准库中。这向Linux发行版维护者提供了一个将Python项目转换为发行版软件包的标准方法,以及向系统管理员们提供了直接将这些软件包安装到目标系统的标准方法。</p>
|
||
<p>自从很多年前 Python 2.0 发布,将构建系统和包安装器与语言运行时的释放循环紧密连接在一起产生了很多问题。现在推荐做法是在项目中使用 <code class="docutils literal notranslate"><span class="pre">pip</span></code> 包安装器和 <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> 构建系统,而不是直接使用 <code class="docutils literal notranslate"><span class="pre">distutils</span></code>。</p>
|
||
<p>请参阅 <a class="reference internal" href="../installing/index.html#installing-index"><span class="std std-ref">安装 Python 模块</span></a> 和 <a class="reference internal" href="../distributing/index.html#distributing-index"><span class="std std-ref">分发 Python 模块</span></a> 了解更多细节。</p>
|
||
<p>这个旧文档将被保留,至到我们相信 <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> 覆盖了所有内容。</p>
|
||
<section id="distutils-based-source-distributions">
|
||
<span id="inst-new-standard"></span><h3>基于 <code class="docutils literal notranslate"><span class="pre">distutils</span></code> 的源代码分发<a class="headerlink" href="#distutils-based-source-distributions" title="永久链接至标题">¶</a></h3>
|
||
<p>If you download a module source distribution, you can tell pretty quickly if it
|
||
was packaged and distributed in the standard way, i.e. using the Distutils.
|
||
First, the distribution's name and version number will be featured prominently
|
||
in the name of the downloaded archive, e.g. <code class="file docutils literal notranslate"><span class="pre">foo-1.0.tar.gz</span></code> or
|
||
<code class="file docutils literal notranslate"><span class="pre">widget-0.9.7.zip</span></code>. Next, the archive will unpack into a similarly-named
|
||
directory: <code class="file docutils literal notranslate"><span class="pre">foo-1.0</span></code> or <code class="file docutils literal notranslate"><span class="pre">widget-0.9.7</span></code>. Additionally, the
|
||
distribution will contain a setup script <code class="file docutils literal notranslate"><span class="pre">setup.py</span></code>, and a file named
|
||
<code class="file docutils literal notranslate"><span class="pre">README.txt</span></code> or possibly just <code class="file docutils literal notranslate"><span class="pre">README</span></code>, which should explain that
|
||
building and installing the module distribution is a simple matter of running
|
||
one command from a terminal:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install
|
||
</pre></div>
|
||
</div>
|
||
<p>Windows 用户应该使用命令提示符来运行命令(<span class="menuselection">Start ‣ Accessories</span>):</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>setup.py install
|
||
</pre></div>
|
||
</div>
|
||
<p>如果这些事情都属实,那么您已经了解了如何构建和安装您已经下载的模块:只需运行如上的命令。除非您需要以非常规方式安装或者定制构建过程,您其实不需要本文档。更进一步说,以上命令就是您可以从文档中获得的全部。</p>
|
||
</section>
|
||
</section>
|
||
<section id="standard-build-and-install">
|
||
<span id="inst-standard-install"></span><h2>标准构建及安装<a class="headerlink" href="#standard-build-and-install" title="永久链接至标题">¶</a></h2>
|
||
<p>正如 <a class="reference internal" href="#inst-new-standard"><span class="std std-ref">基于 distutils 的源代码分发</span></a> 中所描述的那样,通过 Distutils 构建和安装发行的模块常常只需要在终端执行一个简单的命令。</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install
|
||
</pre></div>
|
||
</div>
|
||
<section id="platform-variations">
|
||
<span id="inst-platform-variations"></span><h3>平台差异<a class="headerlink" href="#platform-variations" title="永久链接至标题">¶</a></h3>
|
||
<p>您应当总是在分发文件的根目录处运行设置的命令,比如,模块分发的源代码最高的子目录。例如,如果您刚刚在 Unix 操作系统上下载了一个模块分发的源代码,您需要做的事:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
|
||
cd foo-1.0
|
||
python setup.py install
|
||
</pre></div>
|
||
</div>
|
||
<p>在 Windows 上,你下载到的可能是 <code class="file docutils literal notranslate"><span class="pre">foo-1.0.zip</span></code>。 如果你将归档文件下载到 <code class="file docutils literal notranslate"><span class="pre">C:\Temp</span></code>,则它将被解包至 <code class="file docutils literal notranslate"><span class="pre">C:\Temp\foo-1.0</span></code>;你可以使用带有图形用户界面的归档管理器(如 WinZip)或命令行工具(如 <strong class="program">unzip</strong> 或 <strong class="program">pkunzip</strong> 等)来解包归档文件。 然后,打开一个命令行提示符窗口并运行:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd c:\Temp\foo-1.0
|
||
python setup.py install
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="splitting-the-job-up">
|
||
<span id="inst-splitting-up"></span><h3>拆分任务<a class="headerlink" href="#splitting-the-job-up" title="永久链接至标题">¶</a></h3>
|
||
<p>Running <code class="docutils literal notranslate"><span class="pre">setup.py</span> <span class="pre">install</span></code> builds and installs all modules in one run. If you
|
||
prefer to work incrementally---especially useful if you want to customize the
|
||
build process, or if things are going wrong---you can use the setup script to do
|
||
one thing at a time. This is particularly helpful when the build and install
|
||
will be done by different users---for example, you might want to build a module
|
||
distribution and hand it off to a system administrator for installation (or do
|
||
it yourself, with super-user privileges).</p>
|
||
<p>For example, you can build everything in one step, and then install everything
|
||
in a second step, by invoking the setup script twice:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build
|
||
python setup.py install
|
||
</pre></div>
|
||
</div>
|
||
<p>If you do this, you will notice that running the <strong class="command">install</strong> command
|
||
first runs the <strong class="command">build</strong> command, which---in this case---quickly notices
|
||
that it has nothing to do, since everything in the <code class="file docutils literal notranslate"><span class="pre">build</span></code> directory is
|
||
up-to-date.</p>
|
||
<p>You may not need this ability to break things down often if all you do is
|
||
install modules downloaded off the 'net, but it's very handy for more advanced
|
||
tasks. If you get into distributing your own Python modules and extensions,
|
||
you'll run lots of individual Distutils commands on their own.</p>
|
||
</section>
|
||
<section id="how-building-works">
|
||
<span id="inst-how-build-works"></span><h3>How building works<a class="headerlink" href="#how-building-works" title="永久链接至标题">¶</a></h3>
|
||
<p>As implied above, the <strong class="command">build</strong> command is responsible for putting the
|
||
files to install into a <em>build directory</em>. By default, this is <code class="file docutils literal notranslate"><span class="pre">build</span></code>
|
||
under the distribution root; if you're excessively concerned with speed, or want
|
||
to keep the source tree pristine, you can change the build directory with the
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--build-base</span></code> option. For example:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build --build-base=/path/to/pybuild/foo-1.0
|
||
</pre></div>
|
||
</div>
|
||
<p>(Or you could do this permanently with a directive in your system or personal
|
||
Distutils configuration file; see section <a class="reference internal" href="#inst-config-files"><span class="std std-ref">Distutils 配置文件Configuration Files</span></a>.) Normally, this
|
||
isn't necessary.</p>
|
||
<p>The default layout for the build tree is as follows:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>--- build/ --- lib/
|
||
or
|
||
--- build/ --- lib.<plat>/
|
||
temp.<plat>/
|
||
</pre></div>
|
||
</div>
|
||
<p>where <code class="docutils literal notranslate"><span class="pre"><plat></span></code> expands to a brief description of the current OS/hardware
|
||
platform and Python version. The first form, with just a <code class="file docutils literal notranslate"><span class="pre">lib</span></code> directory,
|
||
is used for "pure module distributions"---that is, module distributions that
|
||
include only pure Python modules. If a module distribution contains any
|
||
extensions (modules written in C/C++), then the second form, with two <code class="docutils literal notranslate"><span class="pre"><plat></span></code>
|
||
directories, is used. In that case, the <code class="file docutils literal notranslate"><span class="pre">temp.</span><em><span class="pre">plat</span></em></code> directory holds
|
||
temporary files generated by the compile/link process that don't actually get
|
||
installed. In either case, the <code class="file docutils literal notranslate"><span class="pre">lib</span></code> (or <code class="file docutils literal notranslate"><span class="pre">lib.</span><em><span class="pre">plat</span></em></code>) directory
|
||
contains all Python modules (pure Python and extensions) that will be installed.</p>
|
||
<p>In the future, more directories will be added to handle Python scripts,
|
||
documentation, binary executables, and whatever else is needed to handle the job
|
||
of installing Python modules and applications.</p>
|
||
</section>
|
||
<section id="how-installation-works">
|
||
<span id="inst-how-install-works"></span><h3>How installation works<a class="headerlink" href="#how-installation-works" title="永久链接至标题">¶</a></h3>
|
||
<p>After the <strong class="command">build</strong> command runs (whether you run it explicitly, or the
|
||
<strong class="command">install</strong> command does it for you), the work of the <strong class="command">install</strong>
|
||
command is relatively simple: all it has to do is copy everything under
|
||
<code class="file docutils literal notranslate"><span class="pre">build/lib</span></code> (or <code class="file docutils literal notranslate"><span class="pre">build/lib.</span><em><span class="pre">plat</span></em></code>) to your chosen installation
|
||
directory.</p>
|
||
<p>If you don't choose an installation directory---i.e., if you just run <code class="docutils literal notranslate"><span class="pre">setup.py</span>
|
||
<span class="pre">install</span></code>---then the <strong class="command">install</strong> command installs to the standard
|
||
location for third-party Python modules. This location varies by platform and
|
||
by how you built/installed Python itself. On Unix (and Mac OS X, which is also
|
||
Unix-based), it also depends on whether the module distribution being installed
|
||
is pure Python or contains extensions ("non-pure"):</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 13%" />
|
||
<col style="width: 42%" />
|
||
<col style="width: 39%" />
|
||
<col style="width: 6%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>平台</p></th>
|
||
<th class="head"><p>标准安装位置</p></th>
|
||
<th class="head"><p>默认值</p></th>
|
||
<th class="head"><p>备注</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>(单一)Unix</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">/usr/local/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
<td><p>(1)</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>(类)Unix</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">/usr/local/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
<td><p>(1)</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>Windows</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">\Lib\site-packages</span></code></p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">C:\Python</span><em><span class="pre">XY</span></em><span class="pre">\Lib\site-packages</span></code></p></td>
|
||
<td><p>(2)</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>注释:</p>
|
||
<ol class="arabic simple">
|
||
<li><p>Most Linux distributions include Python as a standard part of the system, so
|
||
<code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code> and <code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em></code> are usually both <code class="file docutils literal notranslate"><span class="pre">/usr</span></code> on
|
||
Linux. If you build Python yourself on Linux (or any Unix-like system), the
|
||
default <code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code> and <code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em></code> are <code class="file docutils literal notranslate"><span class="pre">/usr/local</span></code>.</p></li>
|
||
<li><p>The default installation directory on Windows was <code class="file docutils literal notranslate"><span class="pre">C:\Program</span>
|
||
<span class="pre">Files\Python</span></code> under Python 1.6a1, 1.5.2, and earlier.</p></li>
|
||
</ol>
|
||
<p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code> and <code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em></code> stand for the directories that Python
|
||
is installed to, and where it finds its libraries at run-time. They are always
|
||
the same under Windows, and very often the same under Unix and Mac OS X. You
|
||
can find out what your Python installation uses for <code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code> and
|
||
<code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em></code> by running Python in interactive mode and typing a few
|
||
simple commands. Under Unix, just type <code class="docutils literal notranslate"><span class="pre">python</span></code> at the shell prompt. Under
|
||
Windows, choose <span class="menuselection">Start ‣ Programs ‣ Python X.Y ‣
|
||
Python (command line)</span>. Once the interpreter is started, you type Python code
|
||
at the prompt. For example, on my Linux system, I type the three Python
|
||
statements shown below, and get the output as shown, to find out my
|
||
<code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code> and <code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em></code>:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="go">Python 2.4 (#26, Aug 7 2004, 17:19:02)</span>
|
||
<span class="go">Type "help", "copyright", "credits" or "license" for more information.</span>
|
||
<span class="gp">>>> </span><span class="kn">import</span> <span class="nn">sys</span>
|
||
<span class="gp">>>> </span><span class="n">sys</span><span class="o">.</span><span class="n">prefix</span>
|
||
<span class="go">'/usr'</span>
|
||
<span class="gp">>>> </span><span class="n">sys</span><span class="o">.</span><span class="n">exec_prefix</span>
|
||
<span class="go">'/usr'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>A few other placeholders are used in this document: <code class="file docutils literal notranslate"><em><span class="pre">X.Y</span></em></code> stands for the
|
||
version of Python, for example <code class="docutils literal notranslate"><span class="pre">3.2</span></code>; <code class="file docutils literal notranslate"><em><span class="pre">abiflags</span></em></code> will be replaced by
|
||
the value of <a class="reference internal" href="../library/sys.html#sys.abiflags" title="sys.abiflags"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.abiflags</span></code></a> or the empty string for platforms which don't
|
||
define ABI flags; <code class="file docutils literal notranslate"><em><span class="pre">distname</span></em></code> will be replaced by the name of the module
|
||
distribution being installed. Dots and capitalization are important in the
|
||
paths; for example, a value that uses <code class="docutils literal notranslate"><span class="pre">python3.2</span></code> on UNIX will typically use
|
||
<code class="docutils literal notranslate"><span class="pre">Python32</span></code> on Windows.</p>
|
||
<p>If you don't want to install modules to the standard location, or if you don't
|
||
have permission to write there, then you need to read about alternate
|
||
installations in section <a class="reference internal" href="#inst-alt-install"><span class="std std-ref">可选安装形式</span></a>. If you want to customize your
|
||
installation directories more heavily, see section <a class="reference internal" href="#inst-custom-install"><span class="std std-ref">自定义安装</span></a> on
|
||
custom installations.</p>
|
||
</section>
|
||
</section>
|
||
<section id="alternate-installation">
|
||
<span id="inst-alt-install"></span><h2>可选安装形式<a class="headerlink" href="#alternate-installation" title="永久链接至标题">¶</a></h2>
|
||
<p>Often, it is necessary or desirable to install modules to a location other than
|
||
the standard location for third-party Python modules. For example, on a Unix
|
||
system you might not have permission to write to the standard third-party module
|
||
directory. Or you might wish to try out a module before making it a standard
|
||
part of your local Python installation. This is especially true when upgrading
|
||
a distribution already present: you want to make sure your existing base of
|
||
scripts still works with the new version before actually upgrading.</p>
|
||
<p>The Distutils <strong class="command">install</strong> command is designed to make installing module
|
||
distributions to an alternate location simple and painless. The basic idea is
|
||
that you supply a base directory for the installation, and the
|
||
<strong class="command">install</strong> command picks a set of directories (called an <em>installation
|
||
scheme</em>) under this base directory in which to install files. The details
|
||
differ across platforms, so read whichever of the following sections applies to
|
||
you.</p>
|
||
<p>Note that the various alternate installation schemes are mutually exclusive: you
|
||
can pass <code class="docutils literal notranslate"><span class="pre">--user</span></code>, or <code class="docutils literal notranslate"><span class="pre">--home</span></code>, or <code class="docutils literal notranslate"><span class="pre">--prefix</span></code> and <code class="docutils literal notranslate"><span class="pre">--exec-prefix</span></code>, or
|
||
<code class="docutils literal notranslate"><span class="pre">--install-base</span></code> and <code class="docutils literal notranslate"><span class="pre">--install-platbase</span></code>, but you can't mix from these
|
||
groups.</p>
|
||
<section id="alternate-installation-the-user-scheme">
|
||
<span id="inst-alt-install-user"></span><h3>可选安装形式:用户方案<a class="headerlink" href="#alternate-installation-the-user-scheme" title="永久链接至标题">¶</a></h3>
|
||
<p>此方案被设计为针对没有全局 site-packages 目录写入权限或不想安装到该目录的用户的最便捷解决方案。 它可以通过一个简单的选项来启用:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --user
|
||
</pre></div>
|
||
</div>
|
||
<p>Files will be installed into subdirectories of <a class="reference internal" href="../library/site.html#site.USER_BASE" title="site.USER_BASE"><code class="xref py py-data docutils literal notranslate"><span class="pre">site.USER_BASE</span></code></a> (written
|
||
as <code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em></code> hereafter). This scheme installs pure Python modules and
|
||
extension modules in the same location (also known as <a class="reference internal" href="../library/site.html#site.USER_SITE" title="site.USER_SITE"><code class="xref py py-data docutils literal notranslate"><span class="pre">site.USER_SITE</span></code></a>).
|
||
Here are the values for UNIX, including Mac OS X:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 20%" />
|
||
<col style="width: 80%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>安装目录</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>模块</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>脚本</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">/bin</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>数据</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>C 头文件</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">/include/python</span><em><span class="pre">X.Y</span></em><em><span class="pre">abiflags</span></em><span class="pre">/</span><em><span class="pre">distname</span></em></code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>以下是Windows上使用的值:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 20%" />
|
||
<col style="width: 80%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>安装目录</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>模块</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">\Python</span><em><span class="pre">XY</span></em><span class="pre">\site-packages</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>脚本</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">\Python</span><em><span class="pre">XY</span></em><span class="pre">\Scripts</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>数据</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>C 头文件</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">\Python</span><em><span class="pre">XY</span></em><span class="pre">\Include{distname}</span></code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>The advantage of using this scheme compared to the other ones described below is
|
||
that the user site-packages directory is under normal conditions always included
|
||
in <a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a> (see <a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a> for more information), which means that
|
||
there is no additional step to perform after running the <code class="file docutils literal notranslate"><span class="pre">setup.py</span></code> script
|
||
to finalize the installation.</p>
|
||
<p>The <strong class="command">build_ext</strong> command also has a <code class="docutils literal notranslate"><span class="pre">--user</span></code> option to add
|
||
<code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">/include</span></code> to the compiler search path for header files and
|
||
<code class="file docutils literal notranslate"><em><span class="pre">userbase</span></em><span class="pre">/lib</span></code> to the compiler search path for libraries as well as to
|
||
the runtime search path for shared C libraries (rpath).</p>
|
||
</section>
|
||
<section id="alternate-installation-the-home-scheme">
|
||
<span id="inst-alt-install-home"></span><h3>可选安装形式:家目录方案<a class="headerlink" href="#alternate-installation-the-home-scheme" title="永久链接至标题">¶</a></h3>
|
||
<p>“主方案”背后的理念是你可以构建并维护个人的 Python 模块集。 该方案的名称源自 Unix 上“主目录”的概念,因为通常 Unix 用户会将其主目录的布局设置为与 <code class="file docutils literal notranslate"><span class="pre">/usr/</span></code> 或 <code class="file docutils literal notranslate"><span class="pre">/usr/local/</span></code> 相似。 任何人都可以使用该方案,无论其安装的操作系统是什么。</p>
|
||
<p>Installing a new module distribution is as simple as</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --home=<dir>
|
||
</pre></div>
|
||
</div>
|
||
<p>where you can supply any directory you like for the <code class="xref std std-option docutils literal notranslate"><span class="pre">--home</span></code> option. On
|
||
Unix, lazy typists can just type a tilde (<code class="docutils literal notranslate"><span class="pre">~</span></code>); the <strong class="command">install</strong> command
|
||
will expand this to your home directory:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --home=~
|
||
</pre></div>
|
||
</div>
|
||
<p>To make Python find the distributions installed with this scheme, you may have
|
||
to <a class="reference internal" href="#inst-search-path"><span class="std std-ref">modify Python's search path</span></a> or edit
|
||
<code class="xref py py-mod docutils literal notranslate"><span class="pre">sitecustomize</span></code> (see <a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a>) to call <a class="reference internal" href="../library/site.html#site.addsitedir" title="site.addsitedir"><code class="xref py py-func docutils literal notranslate"><span class="pre">site.addsitedir()</span></code></a> or edit
|
||
<a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a>.</p>
|
||
<p>The <code class="xref std std-option docutils literal notranslate"><span class="pre">--home</span></code> option defines the installation base directory. Files are
|
||
installed to the following directories under the installation base as follows:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 20%" />
|
||
<col style="width: 80%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>安装目录</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>模块</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">home</span></em><span class="pre">/lib/python</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>脚本</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">home</span></em><span class="pre">/bin</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>数据</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">home</span></em></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>C 头文件</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">home</span></em><span class="pre">/include/python/</span><em><span class="pre">distname</span></em></code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>(如果你是使用 Windows 请将斜杠替换为反斜杠。)</p>
|
||
</section>
|
||
<section id="alternate-installation-unix-the-prefix-scheme">
|
||
<span id="inst-alt-install-prefix-unix"></span><h3>可选安装形式:Unix(前缀方案)<a class="headerlink" href="#alternate-installation-unix-the-prefix-scheme" title="永久链接至标题">¶</a></h3>
|
||
<p>“前缀方案”适用于当你希望使用一个 Python 安装程序来执行构建/安装(即运行 setup 脚本),但需要将模块安装到另一个 Python 安装版(或看起来类似于另一个 Python 安装版)的第三方模块目录中的情况。 如果这听起来有点不寻常,确实如此 --- 这就是为什么要先介绍用户和主目录方案的原因。 然而,至少有两种已知的情况会用到前缀方案。</p>
|
||
<p>First, consider that many Linux distributions put Python in <code class="file docutils literal notranslate"><span class="pre">/usr</span></code>, rather
|
||
than the more traditional <code class="file docutils literal notranslate"><span class="pre">/usr/local</span></code>. This is entirely appropriate,
|
||
since in those cases Python is part of "the system" rather than a local add-on.
|
||
However, if you are installing Python modules from source, you probably want
|
||
them to go in <code class="file docutils literal notranslate"><span class="pre">/usr/local/lib/python2.</span><em><span class="pre">X</span></em></code> rather than
|
||
<code class="file docutils literal notranslate"><span class="pre">/usr/lib/python2.</span><em><span class="pre">X</span></em></code>. This can be done with</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/usr/bin/python setup.py install --prefix=/usr/local
|
||
</pre></div>
|
||
</div>
|
||
<p>Another possibility is a network filesystem where the name used to write to a
|
||
remote directory is different from the name used to read it: for example, the
|
||
Python interpreter accessed as <code class="file docutils literal notranslate"><span class="pre">/usr/local/bin/python</span></code> might search for
|
||
modules in <code class="file docutils literal notranslate"><span class="pre">/usr/local/lib/python2.</span><em><span class="pre">X</span></em></code>, but those modules would have to
|
||
be installed to, say, <code class="file docutils literal notranslate"><span class="pre">/mnt/</span><em><span class="pre">@server</span></em><span class="pre">/export/lib/python2.</span><em><span class="pre">X</span></em></code>. This could
|
||
be done with</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
|
||
</pre></div>
|
||
</div>
|
||
<p>In either case, the <code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code> option defines the installation base, and
|
||
the <code class="xref std std-option docutils literal notranslate"><span class="pre">--exec-prefix</span></code> option defines the platform-specific installation
|
||
base, which is used for platform-specific files. (Currently, this just means
|
||
non-pure module distributions, but could be expanded to C libraries, binary
|
||
executables, etc.) If <code class="xref std std-option docutils literal notranslate"><span class="pre">--exec-prefix</span></code> is not supplied, it defaults to
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code>. Files are installed as follows:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 23%" />
|
||
<col style="width: 77%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>安装目录</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>Python 模块</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>扩展模块</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">exec-prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>脚本</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">/bin</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>数据</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>C 头文件</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">/include/python</span><em><span class="pre">X.Y</span></em><em><span class="pre">abiflags</span></em><span class="pre">/</span><em><span class="pre">distname</span></em></code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>There is no requirement that <code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code> or <code class="xref std std-option docutils literal notranslate"><span class="pre">--exec-prefix</span></code>
|
||
actually point to an alternate Python installation; if the directories listed
|
||
above do not already exist, they are created at installation time.</p>
|
||
<p>Incidentally, the real reason the prefix scheme is important is simply that a
|
||
standard Unix installation uses the prefix scheme, but with <code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code>
|
||
and <code class="xref std std-option docutils literal notranslate"><span class="pre">--exec-prefix</span></code> supplied by Python itself as <code class="docutils literal notranslate"><span class="pre">sys.prefix</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">sys.exec_prefix</span></code>. Thus, you might think you'll never use the prefix scheme,
|
||
but every time you run <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">install</span></code> without any other options,
|
||
you're using it.</p>
|
||
<p>Note that installing extensions to an alternate Python installation has no
|
||
effect on how those extensions are built: in particular, the Python header files
|
||
(<code class="file docutils literal notranslate"><span class="pre">Python.h</span></code> and friends) installed with the Python interpreter used to run
|
||
the setup script will be used in compiling extensions. It is your
|
||
responsibility to ensure that the interpreter used to run extensions installed
|
||
in this way is compatible with the interpreter used to build them. The best way
|
||
to do this is to ensure that the two interpreters are the same version of Python
|
||
(possibly different builds, or possibly copies of the same build). (Of course,
|
||
if your <code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code> and <code class="xref std std-option docutils literal notranslate"><span class="pre">--exec-prefix</span></code> don't even point to an
|
||
alternate Python installation, this is immaterial.)</p>
|
||
</section>
|
||
<section id="alternate-installation-windows-the-prefix-scheme">
|
||
<span id="inst-alt-install-prefix-windows"></span><h3>Alternate installation: Windows (the prefix scheme)<a class="headerlink" href="#alternate-installation-windows-the-prefix-scheme" title="永久链接至标题">¶</a></h3>
|
||
<p>Windows has no concept of a user's home directory, and since the standard Python
|
||
installation under Windows is simpler than under Unix, the <code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code>
|
||
option has traditionally been used to install additional packages in separate
|
||
locations on Windows.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --prefix="\Temp\Python"
|
||
</pre></div>
|
||
</div>
|
||
<p>to install modules to the <code class="file docutils literal notranslate"><span class="pre">\Temp\Python</span></code> directory on the current drive.</p>
|
||
<p>The installation base is defined by the <code class="xref std std-option docutils literal notranslate"><span class="pre">--prefix</span></code> option; the
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--exec-prefix</span></code> option is not supported under Windows, which means that
|
||
pure Python modules and extension modules are installed into the same location.
|
||
Files are installed as follows:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 21%" />
|
||
<col style="width: 79%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>安装目录</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>模块</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">\Lib\site-packages</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>脚本</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">\Scripts</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>数据</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>C 头文件</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">\Include{distname}</span></code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
</section>
|
||
<section id="custom-installation">
|
||
<span id="inst-custom-install"></span><h2>自定义安装<a class="headerlink" href="#custom-installation" title="永久链接至标题">¶</a></h2>
|
||
<p>Sometimes, the alternate installation schemes described in section
|
||
<a class="reference internal" href="#inst-alt-install"><span class="std std-ref">可选安装形式</span></a> just don't do what you want. You might want to tweak just
|
||
one or two directories while keeping everything under the same base directory,
|
||
or you might want to completely redefine the installation scheme. In either
|
||
case, you're creating a <em>custom installation scheme</em>.</p>
|
||
<p>To create a custom installation scheme, you start with one of the alternate
|
||
schemes and override some of the installation directories used for the various
|
||
types of files, using these options:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 49%" />
|
||
<col style="width: 51%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>覆盖选项</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>Python 模块</p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">--install-purelib</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>扩展模块</p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">--install-platlib</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>所有模块</p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">--install-lib</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>脚本</p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">--install-scripts</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>数据</p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">--install-data</span></code></p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>C 头文件</p></td>
|
||
<td><p><code class="docutils literal notranslate"><span class="pre">--install-headers</span></code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>These override options can be relative, absolute,
|
||
or explicitly defined in terms of one of the installation base directories.
|
||
(There are two installation base directories, and they are normally the
|
||
same---they only differ when you use the Unix "prefix scheme" and supply
|
||
different <code class="docutils literal notranslate"><span class="pre">--prefix</span></code> and <code class="docutils literal notranslate"><span class="pre">--exec-prefix</span></code> options; using <code class="docutils literal notranslate"><span class="pre">--install-lib</span></code>
|
||
will override values computed or given for <code class="docutils literal notranslate"><span class="pre">--install-purelib</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">--install-platlib</span></code>, and is recommended for schemes that don't make a
|
||
difference between Python and extension modules.)</p>
|
||
<p>For example, say you're installing a module distribution to your home directory
|
||
under Unix---but you want scripts to go in <code class="file docutils literal notranslate"><span class="pre">~/scripts</span></code> rather than
|
||
<code class="file docutils literal notranslate"><span class="pre">~/bin</span></code>. As you might expect, you can override this directory with the
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--install-scripts</span></code> option; in this case, it makes most sense to supply
|
||
a relative path, which will be interpreted relative to the installation base
|
||
directory (your home directory, in this case):</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --home=~ --install-scripts=scripts
|
||
</pre></div>
|
||
</div>
|
||
<p>Another Unix example: suppose your Python installation was built and installed
|
||
with a prefix of <code class="file docutils literal notranslate"><span class="pre">/usr/local/python</span></code>, so under a standard installation
|
||
scripts will wind up in <code class="file docutils literal notranslate"><span class="pre">/usr/local/python/bin</span></code>. If you want them in
|
||
<code class="file docutils literal notranslate"><span class="pre">/usr/local/bin</span></code> instead, you would supply this absolute directory for the
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--install-scripts</span></code> option:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --install-scripts=/usr/local/bin
|
||
</pre></div>
|
||
</div>
|
||
<p>(This performs an installation using the "prefix scheme", where the prefix is
|
||
whatever your Python interpreter was installed with--- <code class="file docutils literal notranslate"><span class="pre">/usr/local/python</span></code>
|
||
in this case.)</p>
|
||
<p>If you maintain Python on Windows, you might want third-party modules to live in
|
||
a subdirectory of <code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code>, rather than right in <code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code>
|
||
itself. This is almost as easy as customizing the script installation
|
||
directory---you just have to remember that there are two types of modules
|
||
to worry about, Python and extension modules, which can conveniently be both
|
||
controlled by one option:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --install-lib=Site
|
||
</pre></div>
|
||
</div>
|
||
<p>The specified installation directory is relative to <code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em></code>. Of
|
||
course, you also have to ensure that this directory is in Python's module
|
||
search path, such as by putting a <code class="file docutils literal notranslate"><span class="pre">.pth</span></code> file in a site directory (see
|
||
<a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a>). See section <a class="reference internal" href="#inst-search-path"><span class="std std-ref">修改 Python 的搜索路径</span></a> to find out how to modify
|
||
Python's search path.</p>
|
||
<p>If you want to define an entire installation scheme, you just have to supply all
|
||
of the installation directory options. The recommended way to do this is to
|
||
supply relative paths; for example, if you want to maintain all Python
|
||
module-related files under <code class="file docutils literal notranslate"><span class="pre">python</span></code> in your home directory, and you want a
|
||
separate directory for each platform that you use your home directory from, you
|
||
might define the following installation scheme:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --home=~ \
|
||
--install-purelib=python/lib \
|
||
--install-platlib=python/lib.$PLAT \
|
||
--install-scripts=python/scripts
|
||
--install-data=python/data
|
||
</pre></div>
|
||
</div>
|
||
<p>或者,等价于</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --home=~/python \
|
||
--install-purelib=lib \
|
||
--install-platlib='lib.$PLAT' \
|
||
--install-scripts=scripts
|
||
--install-data=data
|
||
</pre></div>
|
||
</div>
|
||
<p><code class="docutils literal notranslate"><span class="pre">$PLAT</span></code> is not (necessarily) an environment variable---it will be expanded by
|
||
the Distutils as it parses your command line options, just as it does when
|
||
parsing your configuration file(s).</p>
|
||
<p>Obviously, specifying the entire installation scheme every time you install a
|
||
new module distribution would be very tedious. Thus, you can put these options
|
||
into your Distutils config file (see section <a class="reference internal" href="#inst-config-files"><span class="std std-ref">Distutils 配置文件Configuration Files</span></a>):</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[install]</span>
|
||
<span class="na">install-base</span><span class="o">=</span><span class="s">$HOME</span>
|
||
<span class="na">install-purelib</span><span class="o">=</span><span class="s">python/lib</span>
|
||
<span class="na">install-platlib</span><span class="o">=</span><span class="s">python/lib.$PLAT</span>
|
||
<span class="na">install-scripts</span><span class="o">=</span><span class="s">python/scripts</span>
|
||
<span class="na">install-data</span><span class="o">=</span><span class="s">python/data</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>或者,等价于,</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[install]</span>
|
||
<span class="na">install-base</span><span class="o">=</span><span class="s">$HOME/python</span>
|
||
<span class="na">install-purelib</span><span class="o">=</span><span class="s">lib</span>
|
||
<span class="na">install-platlib</span><span class="o">=</span><span class="s">lib.$PLAT</span>
|
||
<span class="na">install-scripts</span><span class="o">=</span><span class="s">scripts</span>
|
||
<span class="na">install-data</span><span class="o">=</span><span class="s">data</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Note that these two are <em>not</em> equivalent if you supply a different installation
|
||
base directory when you run the setup script. For example,</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py install --install-base=/tmp
|
||
</pre></div>
|
||
</div>
|
||
<p>would install pure modules to <code class="file docutils literal notranslate"><span class="pre">/tmp/python/lib</span></code> in the first case, and
|
||
to <code class="file docutils literal notranslate"><span class="pre">/tmp/lib</span></code> in the second case. (For the second case, you probably
|
||
want to supply an installation base of <code class="file docutils literal notranslate"><span class="pre">/tmp/python</span></code>.)</p>
|
||
<p>You probably noticed the use of <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> and <code class="docutils literal notranslate"><span class="pre">$PLAT</span></code> in the sample
|
||
configuration file input. These are Distutils configuration variables, which
|
||
bear a strong resemblance to environment variables. In fact, you can use
|
||
environment variables in config files on platforms that have such a notion but
|
||
the Distutils additionally define a few extra variables that may not be in your
|
||
environment, such as <code class="docutils literal notranslate"><span class="pre">$PLAT</span></code>. (And of course, on systems that don't have
|
||
environment variables, such as Mac OS 9, the configuration variables supplied by
|
||
the Distutils are the only ones you can use.) See section <a class="reference internal" href="#inst-config-files"><span class="std std-ref">Distutils 配置文件Configuration Files</span></a>
|
||
for details.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>When a <a class="reference internal" href="../library/venv.html#venv-def"><span class="std std-ref">virtual environment</span></a> is activated, any options
|
||
that change the installation path will be ignored from all distutils configuration
|
||
files to prevent inadvertently installing projects outside of the virtual
|
||
environment.</p>
|
||
</div>
|
||
<section id="modifying-python-s-search-path">
|
||
<span id="inst-search-path"></span><h3>修改 Python 的搜索路径<a class="headerlink" href="#modifying-python-s-search-path" title="永久链接至标题">¶</a></h3>
|
||
<p>When the Python interpreter executes an <a class="reference internal" href="../reference/simple_stmts.html#import"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">import</span></code></a> statement, it searches
|
||
for both Python code and extension modules along a search path. A default value
|
||
for the path is configured into the Python binary when the interpreter is built.
|
||
You can determine the path by importing the <a class="reference internal" href="../library/sys.html#module-sys" title="sys: Access system-specific parameters and functions."><code class="xref py py-mod docutils literal notranslate"><span class="pre">sys</span></code></a> module and printing the
|
||
value of <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ python
|
||
Python 2.2 (#11, Oct 3 2002, 13:31:27)
|
||
[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
|
||
Type "help", "copyright", "credits" or "license" for more information.
|
||
>>> import sys
|
||
>>> sys.path
|
||
['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
|
||
'/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
|
||
'/usr/local/lib/python2.3/site-packages']
|
||
>>>
|
||
</pre></div>
|
||
</div>
|
||
<p>The null string in <code class="docutils literal notranslate"><span class="pre">sys.path</span></code> represents the current working directory.</p>
|
||
<p>The expected convention for locally installed packages is to put them in the
|
||
<code class="file docutils literal notranslate"><em><span class="pre">...</span></em><span class="pre">/site-packages/</span></code> directory, but you may want to install Python
|
||
modules into some arbitrary directory. For example, your site may have a
|
||
convention of keeping all software related to the web server under <code class="file docutils literal notranslate"><span class="pre">/www</span></code>.
|
||
Add-on Python modules might then belong in <code class="file docutils literal notranslate"><span class="pre">/www/python</span></code>, and in order to
|
||
import them, this directory must be added to <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>. There are several
|
||
different ways to add the directory.</p>
|
||
<p>The most convenient way is to add a path configuration file to a directory
|
||
that's already on Python's path, usually to the <code class="file docutils literal notranslate"><span class="pre">.../site-packages/</span></code>
|
||
directory. Path configuration files have an extension of <code class="file docutils literal notranslate"><span class="pre">.pth</span></code>, and each
|
||
line must contain a single path that will be appended to <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>. (Because
|
||
the new paths are appended to <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>, modules in the added directories
|
||
will not override standard modules. This means you can't use this mechanism for
|
||
installing fixed versions of standard modules.)</p>
|
||
<p>Paths can be absolute or relative, in which case they're relative to the
|
||
directory containing the <code class="file docutils literal notranslate"><span class="pre">.pth</span></code> file. See the documentation of
|
||
the <a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a> module for more information.</p>
|
||
<p>A slightly less convenient way is to edit the <code class="file docutils literal notranslate"><span class="pre">site.py</span></code> file in Python's
|
||
standard library, and modify <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>. <code class="file docutils literal notranslate"><span class="pre">site.py</span></code> is automatically
|
||
imported when the Python interpreter is executed, unless the <a class="reference internal" href="../using/cmdline.html#id3"><code class="xref std std-option docutils literal notranslate"><span class="pre">-S</span></code></a> switch
|
||
is supplied to suppress this behaviour. So you could simply edit
|
||
<code class="file docutils literal notranslate"><span class="pre">site.py</span></code> and add two lines to it:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
|
||
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'/www/python/'</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>However, if you reinstall the same major version of Python (perhaps when
|
||
upgrading from 2.2 to 2.2.2, for example) <code class="file docutils literal notranslate"><span class="pre">site.py</span></code> will be overwritten by
|
||
the stock version. You'd have to remember that it was modified and save a copy
|
||
before doing the installation.</p>
|
||
<p>There are two environment variables that can modify <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>.
|
||
<span class="target" id="index-0"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONHOME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONHOME</span></code></a> sets an alternate value for the prefix of the Python
|
||
installation. For example, if <span class="target" id="index-1"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONHOME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONHOME</span></code></a> is set to <code class="docutils literal notranslate"><span class="pre">/www/python</span></code>,
|
||
the search path will be set to <code class="docutils literal notranslate"><span class="pre">['',</span> <span class="pre">'/www/python/lib/pythonX.Y/',</span>
|
||
<span class="pre">'/www/python/lib/pythonX.Y/plat-linux2',</span> <span class="pre">...]</span></code>.</p>
|
||
<p>The <span class="target" id="index-2"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONPATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPATH</span></code></a> variable can be set to a list of paths that will be
|
||
added to the beginning of <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>. For example, if <span class="target" id="index-3"></span><a class="reference internal" href="../using/cmdline.html#envvar-PYTHONPATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPATH</span></code></a> is
|
||
set to <code class="docutils literal notranslate"><span class="pre">/www/python:/opt/py</span></code>, the search path will begin with
|
||
<code class="docutils literal notranslate"><span class="pre">['/www/python',</span> <span class="pre">'/opt/py']</span></code>. (Note that directories must exist in order to
|
||
be added to <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>; the <a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a> module removes paths that don't
|
||
exist.)</p>
|
||
<p>Finally, <code class="docutils literal notranslate"><span class="pre">sys.path</span></code> is just a regular Python list, so any Python application
|
||
can modify it by adding or removing entries.</p>
|
||
</section>
|
||
</section>
|
||
<section id="distutils-configuration-files">
|
||
<span id="inst-config-files"></span><h2>Distutils 配置文件Configuration Files<a class="headerlink" href="#distutils-configuration-files" title="永久链接至标题">¶</a></h2>
|
||
<p>As mentioned above, you can use Distutils configuration files to record personal
|
||
or site preferences for any Distutils options. That is, any option to any
|
||
command can be stored in one of two or three (depending on your platform)
|
||
configuration files, which will be consulted before the command-line is parsed.
|
||
This means that configuration files will override default values, and the
|
||
command-line will in turn override configuration files. Furthermore, if
|
||
multiple configuration files apply, values from "earlier" files are overridden
|
||
by "later" files.</p>
|
||
<section id="location-and-names-of-config-files">
|
||
<span id="inst-config-filenames"></span><h3>Location and names of config files<a class="headerlink" href="#location-and-names-of-config-files" title="永久链接至标题">¶</a></h3>
|
||
<p>The names and locations of the configuration files vary slightly across
|
||
platforms. On Unix and Mac OS X, the three configuration files (in the order
|
||
they are processed) are:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 18%" />
|
||
<col style="width: 73%" />
|
||
<col style="width: 9%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>位置和文件名</p></th>
|
||
<th class="head"><p>备注</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>system</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">ver</span></em><span class="pre">/distutils/distutils.cfg</span></code></p></td>
|
||
<td><p>(1)</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>personal</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">$HOME/.pydistutils.cfg</span></code></p></td>
|
||
<td><p>(2)</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>local</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">setup.cfg</span></code></p></td>
|
||
<td><p>(3)</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>而在 Windows 中,配置文件为:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 20%" />
|
||
<col style="width: 70%" />
|
||
<col style="width: 10%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>文件类型</p></th>
|
||
<th class="head"><p>位置和文件名</p></th>
|
||
<th class="head"><p>备注</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>system</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">\Lib\distutils\distutils.cfg</span></code></p></td>
|
||
<td><p>(4)</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>personal</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">%HOME%\pydistutils.cfg</span></code></p></td>
|
||
<td><p>(5)</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>local</p></td>
|
||
<td><p><code class="file docutils literal notranslate"><span class="pre">setup.cfg</span></code></p></td>
|
||
<td><p>(3)</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>On all platforms, the "personal" file can be temporarily disabled by
|
||
passing the <cite>--no-user-cfg</cite> option.</p>
|
||
<p>注释:</p>
|
||
<ol class="arabic simple">
|
||
<li><p>Strictly speaking, the system-wide configuration file lives in the directory
|
||
where the Distutils are installed; under Python 1.6 and later on Unix, this is
|
||
as shown. For Python 1.5.2, the Distutils will normally be installed to
|
||
<code class="file docutils literal notranslate"><em><span class="pre">prefix</span></em><span class="pre">/lib/python1.5/site-packages/distutils</span></code>, so the system
|
||
configuration file should be put there under Python 1.5.2.</p></li>
|
||
<li><p>On Unix, if the <span class="target" id="index-4"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">HOME</span></code> environment variable is not defined, the user's
|
||
home directory will be determined with the <code class="xref py py-func docutils literal notranslate"><span class="pre">getpwuid()</span></code> function from the
|
||
standard <a class="reference internal" href="../library/pwd.html#module-pwd" title="pwd: The password database (getpwnam() and friends). (Unix)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pwd</span></code></a> module. This is done by the <a class="reference internal" href="../library/os.path.html#os.path.expanduser" title="os.path.expanduser"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.path.expanduser()</span></code></a>
|
||
function used by Distutils.</p></li>
|
||
<li><p>I.e., in the current directory (usually the location of the setup script).</p></li>
|
||
<li><p>(See also note (1).) Under Python 1.6 and later, Python's default "installation
|
||
prefix" is <code class="file docutils literal notranslate"><span class="pre">C:\Python</span></code>, so the system configuration file is normally
|
||
<code class="file docutils literal notranslate"><span class="pre">C:\Python\Lib\distutils\distutils.cfg</span></code>. Under Python 1.5.2, the
|
||
default prefix was <code class="file docutils literal notranslate"><span class="pre">C:\Program</span> <span class="pre">Files\Python</span></code>, and the Distutils were not
|
||
part of the standard library---so the system configuration file would be
|
||
<code class="file docutils literal notranslate"><span class="pre">C:\Program</span> <span class="pre">Files\Python\distutils\distutils.cfg</span></code> in a standard Python
|
||
1.5.2 installation under Windows.</p></li>
|
||
<li><p>On Windows, if the <span class="target" id="index-5"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">HOME</span></code> environment variable is not defined,
|
||
<span class="target" id="index-6"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">USERPROFILE</span></code> then <span class="target" id="index-7"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">HOMEDRIVE</span></code> and <span class="target" id="index-8"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">HOMEPATH</span></code> will
|
||
be tried. This is done by the <a class="reference internal" href="../library/os.path.html#os.path.expanduser" title="os.path.expanduser"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.path.expanduser()</span></code></a> function used
|
||
by Distutils.</p></li>
|
||
</ol>
|
||
</section>
|
||
<section id="syntax-of-config-files">
|
||
<span id="inst-config-syntax"></span><h3>Syntax of config files<a class="headerlink" href="#syntax-of-config-files" title="永久链接至标题">¶</a></h3>
|
||
<p>The Distutils configuration files all have the same syntax. The config files
|
||
are grouped into sections. There is one section for each Distutils command,
|
||
plus a <code class="docutils literal notranslate"><span class="pre">global</span></code> section for global options that affect every command. Each
|
||
section consists of one option per line, specified as <code class="docutils literal notranslate"><span class="pre">option=value</span></code>.</p>
|
||
<p>For example, the following is a complete config file that just forces all
|
||
commands to run quietly by default:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[global]</span>
|
||
<span class="na">verbose</span><span class="o">=</span><span class="s">0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If this is installed as the system config file, it will affect all processing of
|
||
any Python module distribution by any user on the current system. If it is
|
||
installed as your personal config file (on systems that support them), it will
|
||
affect only module distributions processed by you. And if it is used as the
|
||
<code class="file docutils literal notranslate"><span class="pre">setup.cfg</span></code> for a particular module distribution, it affects only that
|
||
distribution.</p>
|
||
<p>You could override the default "build base" directory and make the
|
||
<strong class="command">build*</strong> commands always forcibly rebuild all files with the
|
||
following:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[build]</span>
|
||
<span class="na">build-base</span><span class="o">=</span><span class="s">blib</span>
|
||
<span class="na">force</span><span class="o">=</span><span class="s">1</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>which corresponds to the command-line arguments</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build --build-base=blib --force
|
||
</pre></div>
|
||
</div>
|
||
<p>except that including the <strong class="command">build</strong> command on the command-line means
|
||
that command will be run. Including a particular command in config files has no
|
||
such implication; it only means that if the command is run, the options in the
|
||
config file will apply. (Or if other commands that derive values from it are
|
||
run, they will use the values in the config file.)</p>
|
||
<p>You can find out the complete list of options for any command using the
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--help</span></code> option, e.g.:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build --help
|
||
</pre></div>
|
||
</div>
|
||
<p>and you can find out the complete list of global options by using
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">--help</span></code> without a command:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py --help
|
||
</pre></div>
|
||
</div>
|
||
<p>See also the "Reference" section of the "Distributing Python Modules" manual.</p>
|
||
</section>
|
||
</section>
|
||
<section id="building-extensions-tips-and-tricks">
|
||
<span id="inst-building-ext"></span><h2>Building Extensions: Tips and Tricks<a class="headerlink" href="#building-extensions-tips-and-tricks" title="永久链接至标题">¶</a></h2>
|
||
<p>Whenever possible, the Distutils try to use the configuration information made
|
||
available by the Python interpreter used to run the <code class="file docutils literal notranslate"><span class="pre">setup.py</span></code> script.
|
||
For example, the same compiler and linker flags used to compile Python will also
|
||
be used for compiling extensions. Usually this will work well, but in
|
||
complicated situations this might be inappropriate. This section discusses how
|
||
to override the usual Distutils behaviour.</p>
|
||
<section id="tweaking-compiler-linker-flags">
|
||
<span id="inst-tweak-flags"></span><h3>Tweaking compiler/linker flags<a class="headerlink" href="#tweaking-compiler-linker-flags" title="永久链接至标题">¶</a></h3>
|
||
<p>Compiling a Python extension written in C or C++ will sometimes require
|
||
specifying custom flags for the compiler and linker in order to use a particular
|
||
library or produce a special kind of object code. This is especially true if the
|
||
extension hasn't been tested on your platform, or if you're trying to
|
||
cross-compile Python.</p>
|
||
<p>In the most general case, the extension author might have foreseen that
|
||
compiling the extensions would be complicated, and provided a <code class="file docutils literal notranslate"><span class="pre">Setup</span></code> file
|
||
for you to edit. This will likely only be done if the module distribution
|
||
contains many separate extension modules, or if they often require elaborate
|
||
sets of compiler flags in order to work.</p>
|
||
<p>A <code class="file docutils literal notranslate"><span class="pre">Setup</span></code> file, if present, is parsed in order to get a list of extensions
|
||
to build. Each line in a <code class="file docutils literal notranslate"><span class="pre">Setup</span></code> describes a single module. Lines have
|
||
the following structure:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>module ... [sourcefile ...] [cpparg ...] [library ...]
|
||
</pre></div>
|
||
</div>
|
||
<p>Let's examine each of the fields in turn.</p>
|
||
<ul class="simple">
|
||
<li><p><em>module</em> is the name of the extension module to be built, and should be a
|
||
valid Python identifier. You can't just change this in order to rename a module
|
||
(edits to the source code would also be needed), so this should be left alone.</p></li>
|
||
<li><p><em>sourcefile</em> is anything that's likely to be a source code file, at least
|
||
judging by the filename. Filenames ending in <code class="file docutils literal notranslate"><span class="pre">.c</span></code> are assumed to be
|
||
written in C, filenames ending in <code class="file docutils literal notranslate"><span class="pre">.C</span></code>, <code class="file docutils literal notranslate"><span class="pre">.cc</span></code>, and <code class="file docutils literal notranslate"><span class="pre">.c++</span></code> are
|
||
assumed to be C++, and filenames ending in <code class="file docutils literal notranslate"><span class="pre">.m</span></code> or <code class="file docutils literal notranslate"><span class="pre">.mm</span></code> are assumed
|
||
to be in Objective C.</p></li>
|
||
<li><p><em>cpparg</em> is an argument for the C preprocessor, and is anything starting with
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">-I</span></code>, <code class="xref std std-option docutils literal notranslate"><span class="pre">-D</span></code>, <code class="xref std std-option docutils literal notranslate"><span class="pre">-U</span></code> or <code class="xref std std-option docutils literal notranslate"><span class="pre">-C</span></code>.</p></li>
|
||
<li><p><em>library</em> is anything ending in <code class="file docutils literal notranslate"><span class="pre">.a</span></code> or beginning with <code class="xref std std-option docutils literal notranslate"><span class="pre">-l</span></code> or
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">-L</span></code>.</p></li>
|
||
</ul>
|
||
<p>If a particular platform requires a special library on your platform, you can
|
||
add it by editing the <code class="file docutils literal notranslate"><span class="pre">Setup</span></code> file and running <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">build</span></code>.
|
||
For example, if the module defined by the line</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>foo foomodule.c
|
||
</pre></div>
|
||
</div>
|
||
<p>must be linked with the math library <code class="file docutils literal notranslate"><span class="pre">libm.a</span></code> on your platform, simply add
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">-lm</span></code> to the line:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>foo foomodule.c -lm
|
||
</pre></div>
|
||
</div>
|
||
<p>Arbitrary switches intended for the compiler or the linker can be supplied with
|
||
the <code class="xref std std-option docutils literal notranslate"><span class="pre">-Xcompiler</span></code> <em>arg</em> and <code class="xref std std-option docutils literal notranslate"><span class="pre">-Xlinker</span></code> <em>arg</em> options:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm
|
||
</pre></div>
|
||
</div>
|
||
<p>The next option after <code class="xref std std-option docutils literal notranslate"><span class="pre">-Xcompiler</span></code> and <code class="xref std std-option docutils literal notranslate"><span class="pre">-Xlinker</span></code> will be
|
||
appended to the proper command line, so in the above example the compiler will
|
||
be passed the <code class="xref std std-option docutils literal notranslate"><span class="pre">-o32</span></code> option, and the linker will be passed
|
||
<code class="xref std std-option docutils literal notranslate"><span class="pre">-shared</span></code>. If a compiler option requires an argument, you'll have to
|
||
supply multiple <code class="xref std std-option docutils literal notranslate"><span class="pre">-Xcompiler</span></code> options; for example, to pass <code class="docutils literal notranslate"><span class="pre">-x</span> <span class="pre">c++</span></code>
|
||
the <code class="file docutils literal notranslate"><span class="pre">Setup</span></code> file would have to contain <code class="docutils literal notranslate"><span class="pre">-Xcompiler</span> <span class="pre">-x</span> <span class="pre">-Xcompiler</span> <span class="pre">c++</span></code>.</p>
|
||
<p>Compiler flags can also be supplied through setting the <span class="target" id="index-9"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">CFLAGS</span></code>
|
||
environment variable. If set, the contents of <span class="target" id="index-10"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">CFLAGS</span></code> will be added to
|
||
the compiler flags specified in the <code class="file docutils literal notranslate"><span class="pre">Setup</span></code> file.</p>
|
||
</section>
|
||
<section id="using-non-microsoft-compilers-on-windows">
|
||
<span id="inst-non-ms-compilers"></span><h3>在 Windows 上使用非 Microsoft 编辑器<a class="headerlink" href="#using-non-microsoft-compilers-on-windows" title="永久链接至标题">¶</a></h3>
|
||
<section id="borland-codegear-c">
|
||
<h4>Borland/CodeGear C++<a class="headerlink" href="#borland-codegear-c" title="永久链接至标题">¶</a></h4>
|
||
<p>This subsection describes the necessary steps to use Distutils with the Borland
|
||
C++ compiler version 5.5. First you have to know that Borland's object file
|
||
format (OMF) is different from the format used by the Python version you can
|
||
download from the Python or ActiveState Web site. (Python is built with
|
||
Microsoft Visual C++, which uses COFF as the object file format.) For this
|
||
reason you have to convert Python's library <code class="file docutils literal notranslate"><span class="pre">python25.lib</span></code> into the
|
||
Borland format. You can do this as follows:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>coff2omf python25.lib python25_bcpp.lib
|
||
</pre></div>
|
||
</div>
|
||
<p>The <code class="file docutils literal notranslate"><span class="pre">coff2omf</span></code> program comes with the Borland compiler. The file
|
||
<code class="file docutils literal notranslate"><span class="pre">python25.lib</span></code> is in the <code class="file docutils literal notranslate"><span class="pre">Libs</span></code> directory of your Python
|
||
installation. If your extension uses other libraries (zlib, ...) you have to
|
||
convert them too.</p>
|
||
<p>The converted files have to reside in the same directories as the normal
|
||
libraries.</p>
|
||
<p>How does Distutils manage to use these libraries with their changed names? If
|
||
the extension needs a library (eg. <code class="file docutils literal notranslate"><span class="pre">foo</span></code>) Distutils checks first if it
|
||
finds a library with suffix <code class="file docutils literal notranslate"><span class="pre">_bcpp</span></code> (eg. <code class="file docutils literal notranslate"><span class="pre">foo_bcpp.lib</span></code>) and then
|
||
uses this library. In the case it doesn't find such a special library it uses
|
||
the default name (<code class="file docutils literal notranslate"><span class="pre">foo.lib</span></code>.) <a class="footnote-reference brackets" href="#id4" id="id1">1</a></p>
|
||
<p>To let Distutils compile your extension with Borland C++ you now have to type:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build --compiler=bcpp
|
||
</pre></div>
|
||
</div>
|
||
<p>If you want to use the Borland C++ compiler as the default, you could specify
|
||
this in your personal or system-wide configuration file for Distutils (see
|
||
section <a class="reference internal" href="#inst-config-files"><span class="std std-ref">Distutils 配置文件Configuration Files</span></a>.)</p>
|
||
<div class="admonition seealso">
|
||
<p class="admonition-title">参见</p>
|
||
<dl class="simple">
|
||
<dt><a class="reference external" href="https://www.embarcadero.com/products">C++Builder Compiler</a></dt><dd><p>有关 Borland 发布的免费 C++ 编译器的信息,包括下载页面的链接。</p>
|
||
</dd>
|
||
<dt><a class="reference external" href="http://www.cyberus.ca/~g_will/pyExtenDL.shtml">Creating Python Extensions Using Borland's Free Compiler</a></dt><dd><p>介绍如何使用 Borland 发布的免费命令行方式 C++ 编译器构建 Python 的文档。</p>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
</section>
|
||
<section id="gnu-c-cygwin-mingw">
|
||
<h4>GNU C / Cygwin / MinGW<a class="headerlink" href="#gnu-c-cygwin-mingw" title="永久链接至标题">¶</a></h4>
|
||
<p>This section describes the necessary steps to use Distutils with the GNU C/C++
|
||
compilers in their Cygwin and MinGW distributions. <a class="footnote-reference brackets" href="#id5" id="id2">2</a> For a Python interpreter
|
||
that was built with Cygwin, everything should work without any of these
|
||
following steps.</p>
|
||
<p>Not all extensions can be built with MinGW or Cygwin, but many can. Extensions
|
||
most likely to not work are those that use C++ or depend on Microsoft Visual C
|
||
extensions.</p>
|
||
<p>To let Distutils compile your extension with Cygwin you have to type:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build --compiler=cygwin
|
||
</pre></div>
|
||
</div>
|
||
<p>and for Cygwin in no-cygwin mode <a class="footnote-reference brackets" href="#id6" id="id3">3</a> or for MinGW type:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python setup.py build --compiler=mingw32
|
||
</pre></div>
|
||
</div>
|
||
<p>If you want to use any of these options/compilers as default, you should
|
||
consider writing it in your personal or system-wide configuration file for
|
||
Distutils (see section <a class="reference internal" href="#inst-config-files"><span class="std std-ref">Distutils 配置文件Configuration Files</span></a>.)</p>
|
||
<section id="older-versions-of-python-and-mingw">
|
||
<h5>旧版 Python 和 MinGW<a class="headerlink" href="#older-versions-of-python-and-mingw" title="永久链接至标题">¶</a></h5>
|
||
<p>The following instructions only apply if you're using a version of Python
|
||
inferior to 2.4.1 with a MinGW inferior to 3.0.0 (with
|
||
binutils-2.13.90-20030111-1).</p>
|
||
<p>These compilers require some special libraries. This task is more complex than
|
||
for Borland's C++, because there is no program to convert the library. First
|
||
you have to create a list of symbols which the Python DLL exports. (You can find
|
||
a good program for this task at
|
||
<a class="reference external" href="https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/">https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/</a>).</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pexports python25.dll >python25.def
|
||
</pre></div>
|
||
</div>
|
||
<p>The location of an installed <code class="file docutils literal notranslate"><span class="pre">python25.dll</span></code> will depend on the
|
||
installation options and the version and language of Windows. In a "just for
|
||
me" installation, it will appear in the root of the installation directory. In
|
||
a shared installation, it will be located in the system directory.</p>
|
||
<p>Then you can create from these information an import library for gcc.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/cygwin/bin/dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a
|
||
</pre></div>
|
||
</div>
|
||
<p>The resulting library has to be placed in the same directory as
|
||
<code class="file docutils literal notranslate"><span class="pre">python25.lib</span></code>. (Should be the <code class="file docutils literal notranslate"><span class="pre">libs</span></code> directory under your Python
|
||
installation directory.)</p>
|
||
<p>If your extension uses other libraries (zlib,...) you might have to convert
|
||
them too. The converted files have to reside in the same directories as the
|
||
normal libraries do.</p>
|
||
<div class="admonition seealso">
|
||
<p class="admonition-title">参见</p>
|
||
<dl class="simple">
|
||
<dt><a class="reference external" href="http://old.zope.org/Members/als/tips/win32_mingw_modules">Building Python modules on MS Windows platform with MinGW</a></dt><dd><p>针对 MinGW 环境生成必要的库的相关信息</p>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
<p class="rubric">备注</p>
|
||
<dl class="footnote brackets">
|
||
<dt class="label" id="id4"><span class="brackets"><a class="fn-backref" href="#id1">1</a></span></dt>
|
||
<dd><p>这也意味着你可以将现有的全部 COFF 库替换为同名的 OMF 库。</p>
|
||
</dd>
|
||
<dt class="label" id="id5"><span class="brackets"><a class="fn-backref" href="#id2">2</a></span></dt>
|
||
<dd><p>请查看 <a class="reference external" href="https://www.sourceware.org/cygwin/">https://www.sourceware.org/cygwin/</a> 了解更多信息</p>
|
||
</dd>
|
||
<dt class="label" id="id6"><span class="brackets"><a class="fn-backref" href="#id3">3</a></span></dt>
|
||
<dd><p>你将没有可用的 POSIX 模拟,但你也将不再需要 <code class="file docutils literal notranslate"><span class="pre">cygwin1.dll</span></code>。</p>
|
||
</dd>
|
||
</dl>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<h3><a href="../contents.html">目录</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#">安装Python模块(旧版)</a><ul>
|
||
<li><a class="reference internal" href="#introduction">概述</a><ul>
|
||
<li><a class="reference internal" href="#distutils-based-source-distributions">基于 <code class="docutils literal notranslate"><span class="pre">distutils</span></code> 的源代码分发</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#standard-build-and-install">标准构建及安装</a><ul>
|
||
<li><a class="reference internal" href="#platform-variations">平台差异</a></li>
|
||
<li><a class="reference internal" href="#splitting-the-job-up">拆分任务</a></li>
|
||
<li><a class="reference internal" href="#how-building-works">How building works</a></li>
|
||
<li><a class="reference internal" href="#how-installation-works">How installation works</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#alternate-installation">可选安装形式</a><ul>
|
||
<li><a class="reference internal" href="#alternate-installation-the-user-scheme">可选安装形式:用户方案</a></li>
|
||
<li><a class="reference internal" href="#alternate-installation-the-home-scheme">可选安装形式:家目录方案</a></li>
|
||
<li><a class="reference internal" href="#alternate-installation-unix-the-prefix-scheme">可选安装形式:Unix(前缀方案)</a></li>
|
||
<li><a class="reference internal" href="#alternate-installation-windows-the-prefix-scheme">Alternate installation: Windows (the prefix scheme)</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#custom-installation">自定义安装</a><ul>
|
||
<li><a class="reference internal" href="#modifying-python-s-search-path">修改 Python 的搜索路径</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#distutils-configuration-files">Distutils 配置文件Configuration Files</a><ul>
|
||
<li><a class="reference internal" href="#location-and-names-of-config-files">Location and names of config files</a></li>
|
||
<li><a class="reference internal" href="#syntax-of-config-files">Syntax of config files</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#building-extensions-tips-and-tricks">Building Extensions: Tips and Tricks</a><ul>
|
||
<li><a class="reference internal" href="#tweaking-compiler-linker-flags">Tweaking compiler/linker flags</a></li>
|
||
<li><a class="reference internal" href="#using-non-microsoft-compilers-on-windows">在 Windows 上使用非 Microsoft 编辑器</a><ul>
|
||
<li><a class="reference internal" href="#borland-codegear-c">Borland/CodeGear C++</a></li>
|
||
<li><a class="reference internal" href="#gnu-c-cygwin-mingw">GNU C / Cygwin / MinGW</a><ul>
|
||
<li><a class="reference internal" href="#older-versions-of-python-and-mingw">旧版 Python 和 MinGW</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="../distutils/apiref.html"
|
||
title="上一章"><span class="section-number">9. </span>API参考引用</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/install/index.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
>索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="../distutils/apiref.html" title="9. API参考引用"
|
||
>上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
|
||
<br />
|
||
This page is licensed under the Python Software Foundation License Version 2.
|
||
<br />
|
||
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
|
||
<br />
|
||
|
||
<br />
|
||
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
<br />
|
||
|
||
最后更新于 12月 09, 2024.
|
||
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
|
||
<br />
|
||
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |