Latest pwntools on pip can't be installed as it uses an older unicorn which won't compile
Author: sudhackarCreated Aug 31, 2026Updated Aug 31, 2026
Labelsbugbackport-required
on
(test) ➜ ~ cat /etc/os-release
PRETTY_NAME="Ubuntu 26.04 LTS"
NAME="Ubuntu"
VERSION_ID="26.04"
VERSION="26.04 LTS (Resolute Raccoon)"
VERSION_CODENAME=resolute
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=resolute
LOGO=ubuntu-logo
(test) ➜ ~ python3 --version
Python 3.14.4when I run pip install pwntools
(test) ➜ ~ pip install pwntools
Collecting pwntools
Using cached pwntools-4.15.0-py2.py3-none-any.whl.metadata (5.3 kB)
Collecting paramiko>=1.15.2 (from pwntools)
Using cached paramiko-5.0.0-py3-none-any.whl.metadata (3.7 kB)
Collecting mako>=1.0.0 (from pwntools)
Using cached mako-1.4.1-py3-none-any.whl.metadata (2.9 kB)
Collecting pyelftools>=0.29 (from pwntools)
Using cached pyelftools-0.33-py3-none-any.whl.metadata (1.0 kB)
Collecting capstone>=3.0.5rc2 (from pwntools)
Using cached capstone-6.0.0a10-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (3.8 kB)
Collecting ropgadget>=5.3 (from pwntools)
Using cached ropgadget-7.7-py3-none-any.whl.metadata (1.0 kB)
Collecting pyserial>=2.7 (from pwntools)
Using cached pyserial-3.5-py2.py3-none-any.whl.metadata (1.6 kB)
Collecting requests>=2.0 (from pwntools)
Using cached requests-2.34.2-py3-none-any.whl.metadata (4.8 kB)
Requirement already satisfied: pip>=6.0.8 in ./.envs/test/lib/python3.14/site-packages (from pwntools) (25.1.1)
Collecting pygments>=2.0 (from pwntools)
Using cached pygments-2.21.0-py3-none-any.whl.metadata (2.5 kB)
Collecting pysocks (from pwntools)
Using cached PySocks-1.7.1-py3-none-any.whl.metadata (13 kB)
Collecting python-dateutil (from pwntools)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting packaging (from pwntools)
Using cached packaging-26.3-py3-none-any.whl.metadata (3.5 kB)
Collecting psutil>=3.3.0 (from pwntools)
Using cached psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB)
Collecting intervaltree>=3.0 (from pwntools)
Using cached intervaltree-3.2.1-py2.py3-none-any.whl.metadata (12 kB)
Collecting sortedcontainers (from pwntools)
Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)
Collecting unicorn!=2.1.3,!=2.1.4,>=2.0.1 (from pwntools)
Using cached unicorn-2.1.2.tar.gz (2.9 MB)
Installing build dependencies ... done
^[1 Getting requirements to build wheel ... -^[done
Preparing metadata (pyproject.toml) ... done
Collecting six>=1.12.0 (from pwntools)
Using cached six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting rpyc (from pwntools)
Using cached rpyc-6.0.2-py3-none-any.whl.metadata (3.5 kB)
Collecting colored_traceback (from pwntools)
Using cached colored_traceback-0.4.2-py3-none-any.whl.metadata (4.6 kB)
Collecting unix-ar (from pwntools)
Using cached unix_ar-0.2.1-py2.py3-none-any.whl.metadata (1.9 kB)
Collecting zstandard (from pwntools)
Using cached zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (3.3 kB)
1Collecting MarkupSafe>=2.0 (from mako>=1.0.0->pwntools)
Using cached markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB)
Collecting bcrypt>=3.2 (from paramiko>=1.15.2->pwntools)
Using cached bcrypt-5.0.0-cp39-abi3-manylinux_2_34_x86_64.whl.metadata (10 kB)
^@Collecting cryptography>=3.3 (from paramiko>=1.15.2->pwntools)
Using cached cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl.metadata (4.3 kB)
Collecting invoke>=2.0 (from paramiko>=1.15.2->pwntools)
Using cached invoke-3.0.3-py3-none-any.whl.metadata (3.2 kB)
Collecting pynacl>=1.5 (from paramiko>=1.15.2->pwntools)
Using cached pynacl-1.6.2-cp38-abi3-manylinux_2_34_x86_64.whl.metadata (10.0 kB)
Collecting cffi>=2.0.0 (from cryptography>=3.3->paramiko>=1.15.2->pwntools)
Using cached cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.5 kB)
Collecting pycparser (from cffi>=2.0.0->cryptography>=3.3->paramiko>=1.15.2->pwntools)
Using cached pycparser-3.0-py3-none-any.whl.metadata (8.2 kB)
Collecting charset_normalizer<4,>=2 (from requests>=2.0->pwntools)
Using cached charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (45 kB)
Collecting idna<4,>=2.5 (from requests>=2.0->pwntools)
Using cached idna-3.19-py3-none-any.whl.metadata (9.2 kB)
Collecting urllib3<3,>=1.26 (from requests>=2.0->pwntools)
Using cached urllib3-2.7.0-py3-none-any.whl.metadata (6.9 kB)
Collecting certifi>=2023.5.7 (from requests>=2.0->pwntools)
Using cached certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB)
Collecting plumbum (from rpyc->pwntools)
Using cached plumbum-2.0.2-py3-none-any.whl.metadata (8.5 kB)
Using cached pwntools-4.15.0-py2.py3-none-any.whl (12.9 MB)
Using cached capstone-6.0.0a10-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.6 MB)
Using cached intervaltree-3.2.1-py2.py3-none-any.whl (25 kB)
Using cached mako-1.4.1-py3-none-any.whl (80 kB)
Using cached markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (23 kB)
Using cached paramiko-5.0.0-py3-none-any.whl (208 kB)
Using cached bcrypt-5.0.0-cp39-abi3-manylinux_2_34_x86_64.whl (278 kB)
Using cached cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl (4.7 MB)
Using cached cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (221 kB)
Using cached invoke-3.0.3-py3-none-any.whl (160 kB)
Using cached psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (155 kB)
Using cached pyelftools-0.33-py3-none-any.whl (201 kB)
Using cached pygments-2.21.0-py3-none-any.whl (1.3 MB)
Using cached pynacl-1.6.2-cp38-abi3-manylinux_2_34_x86_64.whl (1.4 MB)
Using cached pyserial-3.5-py2.py3-none-any.whl (90 kB)
Using cached requests-2.34.2-py3-none-any.whl (73 kB)
Using cached charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (251 kB)
Using cached idna-3.19-py3-none-any.whl (68 kB)
Using cached urllib3-2.7.0-py3-none-any.whl (131 kB)
Using cached certifi-2026.7.22-py3-none-any.whl (136 kB)
Using cached ropgadget-7.7-py3-none-any.whl (32 kB)
Using cached six-1.17.0-py2.py3-none-any.whl (11 kB)
Using cached colored_traceback-0.4.2-py3-none-any.whl (5.5 kB)
Using cached packaging-26.3-py3-none-any.whl (129 kB)
Using cached pycparser-3.0-py3-none-any.whl (48 kB)
Using cached PySocks-1.7.1-py3-none-any.whl (16 kB)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Using cached rpyc-6.0.2-py3-none-any.whl (74 kB)
Using cached plumbum-2.0.2-py3-none-any.whl (168 kB)
Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Using cached unix_ar-0.2.1-py2.py3-none-any.whl (6.5 kB)
Using cached zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (5.6 MB)
Building wheels for collected packages: unicorn
Building wheel for unicorn (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for unicorn (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [193 lines of output]
/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated
!!
********************************************************************************
Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).
By 2027-Feb-18, you need to update your project and remove deprecated calls
or your builds will no longer be supported.
See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************
!!
corresp(dist, value, root_dir)
/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX license expression:
License :: OSI Approved :: BSD License
See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************
!!
dist._finalize_license_expression()
/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!
********************************************************************************
Please consider removing the following classifiers in favor of a SPDX license expression:
License :: OSI Approved :: BSD License
See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************
!!
self._finalize_license_expression()
running bdist_wheel
running build
running build_py
Building C extensions
CMake Deprecation Warning at CMakeLists.txt:4 (cmake_minimum_required):
Compatibility with CMake < 3.10 will be removed from a future version of
CMake.
Update the VERSION argument <min> value. Or, use the <min>...<max> syntax
to tell CMake that the project requires at least <min> but has been updated
to work with policies introduced by <max> or earlier.
-- The C compiler identification is GNU 15.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
ERROR: pkg-config binary 'pkg-config' not found
-- Configuring done (5.5s)
-- Generating done (0.2s)
-- Build files have been written to: /tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/build_python
[ 0%] Building C object CMakeFiles/unicorn-common.dir/list.c.o
[ 0%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/garray.c.o
[ 0%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/glib_compat.c.o
[ 1%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/gtestutils.c.o
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/glib_compat/glib_compat.c: In function ‘g_strsplit’:
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/glib_compat/glib_compat.c:1434:7: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
1434 | s = strstr (remainder, delimiter);
| ^
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/glib_compat/glib_compat.c:1448:15: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
1448 | s = strstr (remainder, delimiter);
| ^
[ 1%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/gtree.c.o
[ 1%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/grand.c.o
[ 1%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/glist.c.o
[ 1%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/gmem.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/gpattern.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/glib_compat/gslice.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/bitmap.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/bitops.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/crc32c.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/cutils.c.o
[ 2%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/getauxval.c.o
[ 3%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/guest-random.c.o
[ 3%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/host-utils.c.o
[ 3%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/osdep.c.o
[ 3%] Building C object CMakeFiles/unicorn-common.dir/qemu/util/qdist.c.o
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c: In function ‘qemu_mprotect__osdep’:
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c:66:9: error: implicit declaration of function ‘mprotect’ [-Wimplicit-function-declaration]
66 | if (mprotect(addr, size, prot)) {
| ^~~~~~~~
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c: In function ‘qemu_mprotect_rwx’:
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c:79:45: error: ‘PROT_READ’ undeclared (first use in this function)
79 | return qemu_mprotect__osdep(addr, size, PROT_READ | PROT_WRITE | PROT_EXEC);
| ^~~~~~~~~
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c:79:45: note: each undeclared identifier is reported only once for each function it appears in
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c:79:57: error: ‘PROT_WRITE’ undeclared (first use in this function)
79 | return qemu_mprotect__osdep(addr, size, PROT_READ | PROT_WRITE | PROT_EXEC);
| ^~~~~~~~~~
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c:79:70: error: ‘PROT_EXEC’ undeclared (first use in this function)
79 | return qemu_mprotect__osdep(addr, size, PROT_READ | PROT_WRITE | PROT_EXEC);
| ^~~~~~~~~
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c: In function ‘qemu_mprotect_none’:
/tmp/pip-install-0546ut37/unicorn_a11c5353c0554587840f96cf2f3689ce/src/qemu/util/osdep.c:88:45: error: ‘PROT_NONE’ undeclared (first use in this function)
88 | return qemu_mprotect__osdep(addr, size, PROT_NONE);
| ^~~~~~~~~
gmake[2]: *** [CMakeFiles/unicorn-common.dir/build.make:317: CMakeFiles/unicorn-common.dir/qemu/util/osdep.c.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
gmake[1]: *** [CMakeFiles/Makefile2:740: CMakeFiles/unicorn-common.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
Traceback (most recent call last):
File "/home/sudhackar/.envs/test/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
main()
~~~~^^
File "/home/sudhackar/.envs/test/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
json_out["return_val"] = hook(**hook_input["kwargs"])
~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sudhackar/.envs/test/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 280, in build_wheel
return _build_backend().build_wheel(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
wheel_directory, config_settings, metadata_directory
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/build_meta.py", line 441, in build_wheel
return _build(['bdist_wheel', '--dist-info-dir', str(metadata_directory)])
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/build_meta.py", line 429, in _build
return self._build_with_temp_dir(
~~~~~~~~~~~~~~~~~~~~~~~~~^
cmd,
^^^^
...<3 lines>...
self._arbitrary_args(config_settings),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/build_meta.py", line 410, in _build_with_temp_dir
self.run_setup()
~~~~~~~~~~~~~~^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/build_meta.py", line 317, in run_setup
exec(code, locals()) # noqa: S102 # exec is intentional here
~~~~^^^^^^^^^^^^^^^^
File "<string>", line 149, in <module>
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/__init__.py", line 117, in setup
return distutils.core.setup(**attrs) # type: ignore[return-value]
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/core.py", line 168, in setup
return run_commands(dist)
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/core.py", line 184, in run_commands
dist.run_commands()
~~~~~~~~~~~~~~~~~^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1028, in run_commands
self.run_command(cmd)
~~~~~~~~~~~~~~~~^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1047, in run_command
cmd_obj.run()
~~~~~~~~~~~^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/command/bdist_wheel.py", line 385, in run
self.run_command("build")
~~~~~~~~~~~~~~~~^^^^^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 342, in run_command
self.distribution.run_command(command)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/dist.py", line 1106, in run_command
super().run_command(command)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1047, in run_command
cmd_obj.run()
~~~~~~~~~~~^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/command/build.py", line 137, in run
self.run_command(cmd_name)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/tmp/pip-build-env-yxzx3uvo/overlay/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 342, in run_command
self.distribution.run_command(command)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
FileSource: Gallopsled/pwntools