summaryrefslogtreecommitdiff
path: root/docs/userguide
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2022-06-14 21:33:20 +0100
committerGitHub <noreply@github.com>2022-06-14 21:33:20 +0100
commitec2d4e92cf66805b48a8868b00102555f7f46c8e (patch)
tree73af304087812884156487f16bbda39d9f49111d /docs/userguide
parent254f8a969a542da0b221c178896f741238022fe4 (diff)
parenta4117e13b4ae096ca7e5d150974f49a7ce5328ca (diff)
downloadpython-setuptools-git-ec2d4e92cf66805b48a8868b00102555f7f46c8e.tar.gz
[Docs] Move Cython remarks to the new ext_modules page (#3373)
Diffstat (limited to 'docs/userguide')
-rw-r--r--docs/userguide/dependency_management.rst4
-rw-r--r--docs/userguide/distribution.rst38
-rw-r--r--docs/userguide/ext_modules.rst66
3 files changed, 53 insertions, 55 deletions
diff --git a/docs/userguide/dependency_management.rst b/docs/userguide/dependency_management.rst
index c7f1e059..a35d7bfc 100644
--- a/docs/userguide/dependency_management.rst
+++ b/docs/userguide/dependency_management.rst
@@ -15,6 +15,8 @@ dependency.
:pep:`direct URLs <440#direct-references>`.
+.. _build-requires:
+
Build system requirement
========================
@@ -24,7 +26,7 @@ do the packaging (in our case, ``setuptools`` of course).
This needs to be specified in your ``pyproject.toml`` file
(if you have forgot what this is, go to :doc:`/userguide/quickstart` or :doc:`/build_meta`):
-.. code-block:: ini
+.. code-block:: toml
[build-system]
requires = ["setuptools"]
diff --git a/docs/userguide/distribution.rst b/docs/userguide/distribution.rst
index d2d0ea88..543e6296 100644
--- a/docs/userguide/distribution.rst
+++ b/docs/userguide/distribution.rst
@@ -86,44 +86,6 @@ Or of course you can create more elaborate aliases that do all of the above.
See the sections below on the :ref:`egg_info <egg_info>` and
:ref:`alias <alias>` commands for more ideas.
-Distributing Extensions compiled with Cython
---------------------------------------------
-
-``setuptools`` will detect at build time whether Cython is installed or not.
-If Cython is not found ``setuptools`` will ignore pyx files.
-
-To ensure Cython is available, include Cython in the build-requires section
-of your pyproject.toml::
-
- [build-system]
- requires=[..., "cython"]
-
-Built with pip 10 or later, that declaration is sufficient to include Cython
-in the build. For broader compatibility, declare the dependency in your
-setup-requires of setup.cfg::
-
- [options]
- setup_requires =
- ...
- cython
-
-As long as Cython is present in the build environment, ``setuptools`` includes
-transparent support for building Cython extensions, as
-long as extensions are defined using ``setuptools.Extension``.
-
-If you follow these rules, you can safely list ``.pyx`` files as the source
-of your ``Extension`` objects in the setup script. If it is, then ``setuptools``
-will use it.
-
-Of course, for this to work, your source distributions must include the C
-code generated by Cython, as well as your original ``.pyx`` files. This means
-that you will probably want to include current ``.c`` files in your revision
-control system, rebuilding them whenever you check changes in for the ``.pyx``
-source files. This will ensure that people tracking your project in a revision
-control system will be able to build it even if they don't have Cython
-installed, and that your source releases will be similarly usable with or
-without Cython.
-
.. _Specifying Your Project's Version:
diff --git a/docs/userguide/ext_modules.rst b/docs/userguide/ext_modules.rst
index 213e13c0..0467f4ec 100644
--- a/docs/userguide/ext_modules.rst
+++ b/docs/userguide/ext_modules.rst
@@ -45,11 +45,23 @@ To instruct setuptools to compile the ``foo.c`` file into the extension module
)
.. seealso::
- You can find more information on the `Python docs about C/C++ extensions`_.
- Alternatively, you might also be interested in learn about `Cython`_.
+ You can find more information on the `Python docs about C/C++ extensions`_.
+ Alternatively, you might also be interested in learn about `Cython`_.
- If you plan to distribute a package that uses extensions across multiple
- platforms, :pypi:`cibuildwheel` can also be helpful.
+ If you plan to distribute a package that uses extensions across multiple
+ platforms, :pypi:`cibuildwheel` can also be helpful.
+
+.. important::
+ All files used to compile your extension need to be available on the system
+ when building the package, so please make sure to include some documentation
+ on how developers interested in building your package from source
+ can obtain operating system level dependencies
+ (e.g. compilers and external binary libraries/artifacts).
+
+ You will also need to make sure that all auxiliary files that are contained
+ inside your :term:`project` (e.g. C headers authored by you or your team)
+ are configured to be included in your :term:`sdist <Source Distribution (or "sdist")>`.
+ Please have a look on our section on :ref:`Controlling files in the distribution`.
Compiler and linker options
@@ -89,23 +101,44 @@ The linker searches for libraries in the following order:
* first, in directories given by ``-L`` options (in left-to-right order),
* then, in directories given by the environment variable ``LIBRARY_PATH`` (in left-to-right order).
-.. important::
- All files used to compile your extension need to be available on the system
- when building the package, so please make sure to include some documentation
- on how developers interested in building your package from source
- can obtain operating system level dependencies
- (e.g. compilers and external binary libraries/artifacts).
- You will also need to make sure that all auxiliary files that are contained
- inside your :term:`project` (e.g. C headers authored by you or your team)
- are configured to be included in your :term:`sdist <Source Distribution (or "sdist")>`.
- Please have a look on our section on :ref:`Controlling files in the distribution`.
+Distributing Extensions compiled with Cython
+============================================
+
+When your :pypi:`Cython` extension modules *are declared using the*
+:class:`setuptools.Extension` *class*, ``setuptools`` will detect at build time
+whether Cython is installed or not.
+
+If Cython is present, then ``setuptools`` will use it to build the ``.pyx`` files.
+Otherwise, ``setuptools`` will try to find and compile the equivalent ``.c`` files
+(instead of ``.pyx``). These files can be generated using the
+`cython command line tool`_.
+
+You can ensure that Cython is always automatically installed into the build
+environment by including it as a :ref:`build dependency <build-requires>` in
+your ``pyproject.toml``:
+
+.. code-block:: toml
+ [build-system]
+ requires = [..., "cython"]
+
+Alternatively, you can include the ``.c`` code that is pre-compiled by Cython
+into your source distribution, alongside the original ``.pyx`` files (this
+might save a few seconds when building from an ``sdist``).
+To improve version compatibility, you probably also want to include current
+``.c`` files in your :wiki:`revision control system`, and rebuild them whenever
+you check changes in for the ``.pyx`` source files.
+This will ensure that people tracking your project will be able to build it
+without installing Cython, and that there will be no variation due to small
+differences in the generate C files.
+Please checkout our docs on :ref:`controlling files in the distribution` for
+more information.
----
-API Reference
--------------
+Extension API Reference
+=======================
.. autoclass:: setuptools.Extension
@@ -114,3 +147,4 @@ API Reference
.. _Cython: https://cython.readthedocs.io/en/stable/index.html
.. _directory options: https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
.. _environment variables: https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html>
+.. _cython command line tool: https://cython.readthedocs.io/en/stable/src/userguide/source_files_and_compilation.html