ERROR: 403 Forbidden - Invalid or non-existent authentication information
Votre token PyPI n'a PAS les bonnes permissions ou vous n'êtes pas mainteneur du projet.
Ouvrir : https://pypi.org/project/dnd-5e-core/
Regarder la section "Maintainers" :
- ✅ Si votre nom y est → Continuer étape 2
- ❌ Si votre nom n'y est PAS → VOUS NE POUVEZ PAS PUBLIER
Si vous n'êtes pas mainteneur :
- Contacter le propriétaire actuel
- OU publier sous un autre nom de package
-
Supprimer l'ancien token :
- https://pypi.org/manage/account/token/
- Supprimer tous les tokens pour dnd-5e-core
-
Créer un nouveau token :
- Cliquer "Add API token"
- Token name :
dnd-5e-core-feb-2026 - Scope : sélectionner "Project: dnd-5e-core" ← IMPORTANT !
- Cliquer "Add token"
- COPIER le token (commence par
pypi-...)
Option A - Script automatique :
cd /Users/display/PycharmProjects/dnd-5e-core
./setup_pypi_token.sh
# Coller le nouveau token quand demandéOption B - Manuel :
# Créer le fichier .pypirc
cat > ~/.pypirc << 'EOF'
[distutils]
index-servers =
pypi
[pypi]
username = __token__
password = COLLER_LE_TOKEN_ICI
EOF
# Sécuriser
chmod 600 ~/.pypirc
# Nettoyer les variables d'environnement
unset TWINE_USERNAME
unset TWINE_PASSWORDcd /Users/display/PycharmProjects/dnd-5e-core
./publish_simple.shcat ~/.pypircDoit ressembler EXACTEMENT à :
[distutils]
index-servers =
pypi
[pypi]
username = __token__
password = pypi-Ag...très long token...Erreurs courantes :
- ❌ Espaces avant/après le token
- ❌ Guillemets autour du token
- ❌ Retours à la ligne dans le token
- ✅ Doit venir de : https://pypi.org/ (production)
- ❌ PAS de : https://test.pypi.org/ (test)
curl -I https://pypi.org/project/dnd-5e-core/- Si 404 → Le projet n'existe pas encore → Utilisez un token "Entire account"
- Si 200 → Le projet existe → Utilisez un token "Project: dnd-5e-core"
./test_pypi_auth.shCe script teste l'authentification sans risque de dupliquer la version.
- Lire le guide complet :
TROUBLESHOOTING_403.md - Documentation PyPI : https://pypi.org/help/#apitoken
- Support PyPI : https://pypi.org/help/
TL;DR : 99% du temps c'est soit :
- Le token n'a pas le bon scope ("Project: dnd-5e-core")
- Vous n'êtes pas mainteneur du projet sur PyPI
- Le fichier .pypirc a des espaces ou caractères invisibles