Skip to content

getsentry/pypi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

90d1be7 · Mar 18, 2025
Feb 7, 2025
Aug 5, 2022
Mar 10, 2025
Nov 11, 2024
Aug 29, 2022
Oct 22, 2024
Jul 6, 2022
Oct 16, 2024
Jun 21, 2022
Mar 29, 2024
Jan 12, 2024
Oct 22, 2024
Jan 12, 2024
Jan 12, 2024
Mar 18, 2025
Oct 3, 2022
Oct 4, 2022
Jan 12, 2024
Oct 22, 2024

pypi

sentry internal pypi

this repository contains the tools to import and/or build packages from public pypi for the platforms and achitectures required for sentry development.

adding packages

packages are configured in the packages.ini file.

the easiest way to add a package and its dependencies is to use:

python3 -m add_pkg PKGNAME

each section is an individual package and has some additional instructions which helps for building.

don't worry too much about the formatting, an auto-formatter will ensure the format is correct.

most packages won't need special build instructions and the section contents can be left blank:

[botocore==1.25.12]

[simplejson==3.17.2]
[simplejson==3.17.6]

Anyone in the Engineering team can approve Pull Requests, but it's preferred to get somebody from your team with context to approve your PR.

apt_requires / brew_requires

some packages require special system-level build dependencies, these can be configured using apt_requires (linux) and brew_requires (macos)

[xmlsec==1.3.12]
apt_requires =
    libxmlsec1-dev
    pkg-config
brew_requires =
    libxmlsec1
    pkg-config

custom_prebuild

sometimes the dependencies aren't packaged for apt / brew and you need a custom script to set them up. this script will be passed a single "prefix" directory (which contains the standard bin / lib / include / etc. structure).

the script should set up whatever tools are necessary inside only that directory

[google-crc32c==1.3.0]
custom_prebuild = prebuild/crc32c 1.1.2

likely_binary_ignore

when the sdist has source files of a compiled language (see BINARY_EXTS), we would expect compiled things (e.g. binary executables, shared objects) in the wheel. sometimes this isn't the case, and you can ignore those source files:

[salt==3006.6]
likely_binary_ignore =
    salt-3006.6/pkg/old/smartos/esky/sodium_grabber.c

python_versions

some packages are only intended for particular python versions (or don't otherwise build cleanly). the builds can be filtered using python_versions (though usually you should try and upgrade the relevant package).

[backports-zoneinfo==0.2.1]
python_versions = <3.9

validation

after building the packages will be checked that they can install and import

validate_extras

sometimes you may need to hint the validation tooling of additional requirements

an example is black which has a blackd top-level but requires an optional dependency to use (the black[d] extra). you can hint at this via validate_extras

[black==22.3.0]
validate_extras = d

validate_incorrect_missing_deps

sometimes packages incorrectly specify their dependencies. you can use this option to add import-time dependencies (though you should try and send a PR to fix those packages!)

one example is dictpath which depends on six but doesn't list it:

[dictpath==0.1.3]
validate_incorrect_missing_deps = six

validate_skip_modules

this should usually not be used but sometimes you need to skip importing some top-level modules due to side-effects or weird runtime requirements

[pyuwsgi==2.0.20]
validate_skip_imports = uwsgidecorators