{"id":7156,"library":"devpi-client","title":"devpi-client","description":"devpi-client is a command-line tool for managing devpi-server instances, facilitating Python packaging workflows. It enables users to upload, test, and install packages from devpi indexes. As of version 7.2.1, it continues to support essential package management operations and is actively maintained with regular releases, typically used in conjunction with a running devpi-server.","status":"active","version":"7.2.1","language":"en","source_language":"en","source_url":"https://github.com/devpi/devpi","tags":["pypi","package management","cli","devpi","packaging","private index","artifact repository"],"install":[{"cmd":"pip install devpi-client","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"The client is designed to interact with a devpi-server instance.","package":"devpi-server","optional":true},{"reason":"Requires pkginfo >= 1.10.0 for correct metadata 2.4 support with Python 3.7+.","package":"pkginfo","optional":false},{"reason":"Core dependency for common utilities; version 4.x introduced changes in version parsing.","package":"devpi-common","optional":false},{"reason":"Optional plugin for enhanced authentication tokens with granular permissions.","package":"devpi-tokens","optional":true}],"imports":[],"quickstart":{"code":"# Assuming devpi-server is running at http://localhost:3141\n# Set the devpi client to use the server and create a user\nexport DEVPI_SERVER_URL=\"http://localhost:3141\"\nexport DEVPI_USER=\"myuser\"\nexport DEVPI_PASSWORD=\"mypassword\"\n\n# Point client to the server\ndevpi use $DEVPI_SERVER_URL\n\n# Create a user (if not exists)\ndevpi user -c $DEVPI_USER password=$DEVPI_PASSWORD\n\n# Login to the created user\ndevpi login $DEVPI_USER --password $DEVPI_PASSWORD\n\n# Create a new index for uploads\ndevpi index $DEVPI_USER/dev\n\n# Switch to using the new index\ndevpi use $DEVPI_SERVER_URL/$DEVPI_USER/dev\n\n# Example: Upload a dummy package (requires a setup.py or pyproject.toml in the current directory)\n# Assuming you have a `dist/mypackage-1.0.0.whl` and `dist/mypackage-1.0.0.tar.gz`\n# devpi upload --from-dir dist/","lang":"bash","description":"This quickstart demonstrates basic `devpi-client` operations: pointing to a server, creating a user and index, logging in, and preparing for package uploads. Replace placeholder values for actual usage. Note that `devpi-client` is primarily a command-line tool and direct Python `import` statements for general use are not common."},"warnings":[{"fix":"Upgrade your Python environment to 3.7 or higher.","message":"Support for Python versions prior to 3.7 was dropped in devpi-client 7.0.0. Ensure your environment uses Python 3.7 or newer.","severity":"breaking","affected_versions":">=7.0.0"},{"fix":"Update any custom plugins or scripts to use Python's built-in `pathlib.Path` instead of `py.path.local`.","message":"Devpi-client 7.0.0 removed the dependency on the 'py' package, requiring plugins that expected 'py.path.local' to be adjusted to work with 'pathlib.Path'.","severity":"breaking","affected_versions":">=7.0.0"},{"fix":"Consult the official `devpi-server` security documentation and ensure proper access controls, HTTPS, and authentication are in place before exposing to external networks.","message":"When exposing `devpi-server` to the internet, **security is paramount**. Incorrect configuration of authentication/authorization can lead to insecure repositories. Do NOT expose `devpi-server` without fully understanding its security implications.","severity":"gotcha","affected_versions":"all"},{"fix":"Be mindful of exact version specifications when using commands that parse package versions, especially for older, non-PEP 440 compliant versions. Test `remove` operations carefully.","message":"Devpi-common 4.x introduced custom legacy version parsing which is non-PEP 440 compliant after `packaging >= 22.0` removed support. This can potentially affect commands like `devpi remove` when used with specific version ranges.","severity":"gotcha","affected_versions":">=7.0.0 (due to devpi-common 4.x dependency)"},{"fix":"Refer to current quickstart documentation using explicit commands like `devpi use`, `devpi user`, `devpi login`.","message":"The `devpi quickstart` command was deprecated and removed in older versions (around 2.5.0, 2016). Use explicit `devpi` commands to set up the client.","severity":"deprecated","affected_versions":"<2.6.0"}],"env_vars":null,"last_verified":"2026-04-16T00:00:00.000Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Ensure the server's SSL certificate is valid and trusted by your system's CA store. Alternatively, configure `devpi` to trust the host, e.g., `devpi use --set-cfg --url https://your.devpi.server/` which automatically adds `trusted-host` for pip. For self-signed certificates, you might need to manually trust them or pass `--client-cert` if configured on the server.","cause":"The `devpi-client` is connecting to an HTTPS `devpi-server` with an untrusted or self-signed certificate, or without proper certificate validation configured.","error":"InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised."},{"fix":"Consider setting `setupdirs-only = 1` in the `[devpi:upload]` section of `setup.cfg` or using the `devpi upload --setupdir-only` option to ensure only the directory containing `setup.py` is exported. Ensure all necessary files are tracked by Git.","cause":"When uploading packages, `devpi-client` may encounter issues correctly identifying and exporting files within Git submodule directories, leading to failed uploads.","error":"devpi-client fails upload from git submodule dirs"},{"fix":"Remove old authentication data (`~/.devpi/client/accounts.json`) and re-login using `devpi login` to generate new, compatible credentials. Ensure both client and server are on compatible versions.","cause":"Authentication data schema changes between major versions (e.g., pre-6.x to 6.x and beyond) can cause client-side authentication failures with newer client versions.","error":"Error added in 6.0.4 when old authentication data from before 6.x exists."},{"fix":"This was a bug fixed in `devpi-client 7.2.0`. Upgrade to `devpi-client` version 7.2.0 or higher. `pip install --upgrade devpi-client`","cause":"An internal issue where `devpi-client` attempts to treat a directory as a file during the upload process, leading to a `PermissionError`.","error":"PermissionError during upload due to trying to copy a folder like a file."}]}