Merge remote-tracking branch 'origin/master' into docs-updates
This commit is contained in:
@@ -30,11 +30,11 @@ For more details see https://en.cppreference.com/w/cpp/compiler_support, https:/
|
||||
|
||||
## Windows and Python 2.7
|
||||
|
||||
In previous years, Microsoft distributed a compiler toolchain called 'Visual C++ for Python 2.7', which was a distribution of MSVC 9 that was created to make it easier to build Python 2.7 extensions on Windows, because it was fully compatible with the toolchain that built Python 2.7.
|
||||
In previous years, Microsoft distributed a compiler toolchain called 'Visual C++ for Python 2.7', which was a distribution of MSVC 2008 that was created to make it easier to build Python 2.7 extensions on Windows, because it was fully compatible with the toolchain that built Python 2.7.
|
||||
|
||||
This toolchain does not support modern C++ standards (i.e., C++11 and later). And it is hard to find this toolchain these days, since Microsoft have stopped distributing it. So, by default, cibuildwheel does not attempt to build Python 2.7 extensions on Windows.
|
||||
This toolchain does not support modern C++ standards (i.e., C++11 and later). And it is hard to find this toolchain these days, since Microsoft removed the download for the required Visual Studio 2008 needed to build a native extension in April, 2021. So, by default, cibuildwheel does not attempt to build Python 2.7 extensions on Windows.
|
||||
|
||||
There is an optional workaround for this, though: the pybind11 project argues and shows that it is [possible to compile Python 2.7 extension with a newer compiler](https://pybind11.readthedocs.io/en/stable/faq.html#working-with-ancient-visual-studio-2008-builds-on-windows) and has an example project showing how to do this: https://github.com/pybind/python_example. The main catch is that a user might need to install [a newer "Microsoft Visual C++ Redistributable"](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads), since the newer C++ standard library's binaries are not included by default with the Python 2.7 installation.
|
||||
There is an optional workaround, though: the pybind11 project argues and shows that it is [possible to compile Python 2.7 extension with a newer compiler](https://pybind11.readthedocs.io/en/stable/faq.html#working-with-ancient-visual-studio-2008-builds-on-windows) and has an example project showing how to do this: https://github.com/pybind/python_example. The main catch is that a user might need to install [a newer "Microsoft Visual C++ Redistributable"](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads), since the newer C++ standard library's binaries are not included by default with the Python 2.7 installation.
|
||||
|
||||
Forcing `distutils` or `setuptools` to use a more recent version of MSVC that supports modern C++ can be done in the following way:
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# name: required, printed name
|
||||
# gh: GitHub repo (eventually a url: could be added for non-github projects)
|
||||
# stars: GitHub repo (optional, if different from package, such as for Twisted)
|
||||
# pypi: The pypi name, if different from the GitHub package name
|
||||
# os: Operating system list, [windows, apple, linux] (optional)
|
||||
# ci: [appveyor, github, azurepipelines, circleci, gitlab, travisci] (optional)
|
||||
# notes: (text, optional)
|
||||
@@ -29,6 +30,7 @@
|
||||
|
||||
- name: Parselmouth
|
||||
gh: YannickJadoul/Parselmouth
|
||||
pypi: praat-parselmouth
|
||||
notes: A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels.
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
@@ -82,6 +84,7 @@
|
||||
|
||||
- name: PyAV
|
||||
gh: PyAV-Org/PyAV
|
||||
pypi: av
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
notes: Pythonic bindings for FFmpeg's libraries.
|
||||
@@ -109,6 +112,7 @@
|
||||
|
||||
- name: etebase-py
|
||||
gh: etesync/etebase-py
|
||||
pypi: etebase
|
||||
notes: Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed.
|
||||
ci: [travisci]
|
||||
os: [linux]
|
||||
@@ -175,6 +179,7 @@
|
||||
|
||||
- name: jq.py
|
||||
gh: mwilliamson/jq.py
|
||||
pypi: jq
|
||||
ci: [travisci]
|
||||
os: [apple, linux]
|
||||
|
||||
@@ -226,6 +231,7 @@
|
||||
|
||||
- name: Dependency Injector
|
||||
gh: ets-labs/python-dependency-injector
|
||||
pypi: dependency-injector
|
||||
ci: [travisci]
|
||||
os: [windows, apple, linux]
|
||||
notes: Dependency injection framework for Python, uses Windows TravisCI
|
||||
@@ -237,11 +243,13 @@
|
||||
|
||||
- name: PyTables
|
||||
gh: PyTables/PyTables
|
||||
pypi: tables
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: dd-trace-py
|
||||
gh: DataDog/dd-trace-py
|
||||
pypi: ddtrace
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
notes: Uses custom alternate arch emulation on GitHub
|
||||
@@ -270,6 +278,7 @@
|
||||
- name: MyPy
|
||||
gh: mypyc/mypy_mypyc-wheels
|
||||
stars: python/mypy
|
||||
pypi: mypy
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
notes: MyPyC, the compiled component of MyPy.
|
||||
@@ -277,6 +286,7 @@
|
||||
- name: Imagecodecs (fork)
|
||||
gh: czaki/imagecodecs_build
|
||||
stars: cgohlke/imagecodecs
|
||||
pypi: imagecodecs
|
||||
ci: [azurepipelines]
|
||||
ci_config: azure-pipelines.yaml
|
||||
os: [apple, linux]
|
||||
@@ -293,3 +303,24 @@
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
notes: Time mocking library using only the CPython C API.
|
||||
|
||||
- name: polaroid
|
||||
gh: daggy1234/polaroid
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
notes: Full range of wheels for setuptools rust, with auto release and PyPI deploy.
|
||||
|
||||
- name: python-snappy
|
||||
gh: andrix/python-snappy
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
|
||||
- name: sourmash
|
||||
gh: dib-lab/sourmash
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
|
||||
- name: markupsafe
|
||||
gh: pallets/markupsafe
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ If your wheel didn't compile, check the list below for some debugging tips.
|
||||
|
||||
Linux wheels are built in the [`manylinux` docker images](https://github.com/pypa/manylinux) to provide binary compatible wheels on Linux, according to [PEP 571](https://www.python.org/dev/peps/pep-0571/). Because of this, when building with `cibuildwheel` on Linux, a few things should be taken into account:
|
||||
|
||||
- Programs and libraries cannot be installed on the Travis CI Ubuntu host with `apt-get`, but can be installed inside of the Docker image using `yum` or manually. The same goes for environment variables that are potentially needed to customize the wheel building. `cibuildwheel` supports this by providing the `CIBW_ENVIRONMENT` and `CIBW_BEFORE_BUILD` options to setup the build environment inside the running Docker image. See [the options docs](options.md#build-environment) for details on these options.
|
||||
- Programs and libraries are not installed on the Travis CI Ubuntu host, but rather should be installed inside of the Docker image (using `yum` for `manylinux2010` or `manylinux2014`, and `apt-get` for `manylinux_2_24`) or manually. The same goes for environment variables that are potentially needed to customize the wheel building. `cibuildwheel` supports this by providing the `CIBW_ENVIRONMENT` and `CIBW_BEFORE_BUILD` options to setup the build environment inside the running Docker image. See [the options docs](options.md#build-environment) for details on these options.
|
||||
|
||||
- The project directory is mounted in the running Docker instance as `/project`, the output directory for the wheels as `/output`. In general, this is handled transparently by `cibuildwheel`. For a more finegrained level of control however, the root of the host file system is mounted as `/host`, allowing for example to access shared files, caches, etc. on the host file system. Note that this is not available on CircleCI due to their Docker policies.
|
||||
|
||||
|
||||
@@ -365,6 +365,11 @@ CIBW_BEFORE_ALL: make -C third_party_lib
|
||||
CIBW_BEFORE_ALL_LINUX: yum install -y libffi-dev
|
||||
```
|
||||
|
||||
Note that manylinux2_24 builds occur inside a Debian9 docker, where
|
||||
manylinux2010 and manylinux2014 builds occur inside a CentOS one. So for
|
||||
`manylinux2_24` the `CIBW_BEFORE_ALL_LINUX` command must use `apt-get -y`
|
||||
instead.
|
||||
|
||||
### `CIBW_BEFORE_BUILD` {: #before-build}
|
||||
> Execute a shell command preparing each wheel's build
|
||||
|
||||
|
||||
@@ -45,10 +45,6 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Install Visual C++ for Python 2.7
|
||||
if: runner.os == 'Windows'
|
||||
run: choco install vcpython27 -f -y
|
||||
|
||||
- name: Build wheels
|
||||
run: pipx run cibuildwheel==1.10.0
|
||||
|
||||
@@ -87,10 +83,6 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
||||
- name: Install cibuildwheel
|
||||
run: python -m pip install cibuildwheel==1.10.0
|
||||
|
||||
- name: Install Visual C++ for Python 2.7
|
||||
if: runner.os == 'Windows'
|
||||
run: choco install vcpython27 -f -y
|
||||
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
|
||||
Reference in New Issue
Block a user