diff --git a/tox.ini b/tox.ini
index 6f47aa24f6871ad7ccd4d763203dd4602f0f8603_dG94LmluaQ==..2f4d82c2ae0b3a517b0e91c5ca135a95a8b89c8e_dG94LmluaQ== 100644
--- a/tox.ini
+++ b/tox.ini
@@ -6,3 +6,18 @@
 deps = -rrequirements-test.txt
 commands =
   {envpython} -c 'from logilab.common import pytest; pytest.run()' -t test {posargs}
+
+[testenv:pypi-publish]
+basepython = python3
+skip_install = true
+whitelist_externals = rm
+deps =
+  twine
+passenv =
+  TWINE_USERNAME
+  TWINE_PASSWORD
+commands =
+  rm -rf build dist .egg .egg-info
+  python3 setup.py sdist bdist_wheel
+  twine check dist/*
+  twine upload --skip-existing dist/*