# migrate-to-uv
[](https://pypi.org/project/migrate-to-uv/)
[](https://pypi.org/project/migrate-to-uv/)
[](https://pypi.org/project/migrate-to-uv/)
`migrate-to-uv` migrates a project to [uv](https://github.com/astral-sh/uv) from another package manager.
## Usage
```bash
# With uv
uvx migrate-to-uv
# With pipx
pipx run migrate-to-uv
```
## Supported package managers
The following package managers are supported:
- [Poetry](https://python-poetry.org/) (including projects
using [PEP 621 in Poetry 2.0+](https://python-poetry.org/blog/announcing-poetry-2.0.0/))
- [Pipenv](https://pipenv.pypa.io/en/stable/)
- [pip-tools](https://pip-tools.readthedocs.io/en/stable/)
- [pip](https://pip.pypa.io/en/stable/)
More package managers (e.g., [setuptools](https://setuptools.pypa.io/en/stable/)) could be implemented in the future.
## Features
`migrate-to-uv` converts most existing metadata from supported package managers when migrating to uv, including:
- [Project metadata](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#writing-pyproject-toml) (`name`, `version`, `authors`, ...)
- [Dependencies and optional dependencies](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#dependencies-optional-dependencies)
- [Dependency groups](https://peps.python.org/pep-0735/)
- [Dependency sources](https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-sources) (index, git, URL, path)
- [Dependency markers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/)
- [Entry points](https://packaging.python.org/en/latest/specifications/pyproject-toml/#entry-points)
Version definitions set for dependencies are also preserved, and converted to their
equivalent [PEP 440](https://peps.python.org/pep-0440/) for package managers that use their own syntax (for instance
Poetry's [caret](https://python-poetry.org/docs/dependency-specification/#caret-requirements) syntax).
At the end of the migration, `migrate-to-uv` also generates `uv.lock` file with `uv lock` command to lock dependencies,
and keeps dependencies (both direct and transitive) to the exact same versions they were locked to with the previous
package manager, if a lock file was found.
Raw data
{
"_id": null,
"home_page": null,
"name": "migrate-to-uv",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "uv, migrate, poetry, pipenv",
"author": "Mathieu Kniewallner <mathieu.kniewallner@gmail.com>",
"author_email": "Mathieu Kniewallner <mathieu.kniewallner@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/03/a9/0494967b54bb31e13dca7f460c535062b85b7f88a4b7ec66d54144b5c445/migrate_to_uv-0.7.1.tar.gz",
"platform": null,
"description": "# migrate-to-uv\n\n[](https://pypi.org/project/migrate-to-uv/)\n[](https://pypi.org/project/migrate-to-uv/)\n[](https://pypi.org/project/migrate-to-uv/)\n\n`migrate-to-uv` migrates a project to [uv](https://github.com/astral-sh/uv) from another package manager.\n\n## Usage\n\n```bash\n# With uv\nuvx migrate-to-uv\n\n# With pipx\npipx run migrate-to-uv\n```\n\n## Supported package managers\n\nThe following package managers are supported:\n\n- [Poetry](https://python-poetry.org/) (including projects\n using [PEP 621 in Poetry 2.0+](https://python-poetry.org/blog/announcing-poetry-2.0.0/))\n- [Pipenv](https://pipenv.pypa.io/en/stable/)\n- [pip-tools](https://pip-tools.readthedocs.io/en/stable/)\n- [pip](https://pip.pypa.io/en/stable/)\n\nMore package managers (e.g., [setuptools](https://setuptools.pypa.io/en/stable/)) could be implemented in the future.\n\n## Features\n\n`migrate-to-uv` converts most existing metadata from supported package managers when migrating to uv, including:\n\n- [Project metadata](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#writing-pyproject-toml) (`name`, `version`, `authors`, ...)\n- [Dependencies and optional dependencies](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#dependencies-optional-dependencies)\n- [Dependency groups](https://peps.python.org/pep-0735/)\n- [Dependency sources](https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-sources) (index, git, URL, path)\n- [Dependency markers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/)\n- [Entry points](https://packaging.python.org/en/latest/specifications/pyproject-toml/#entry-points)\n\nVersion definitions set for dependencies are also preserved, and converted to their\nequivalent [PEP 440](https://peps.python.org/pep-0440/) for package managers that use their own syntax (for instance\nPoetry's [caret](https://python-poetry.org/docs/dependency-specification/#caret-requirements) syntax).\n\nAt the end of the migration, `migrate-to-uv` also generates `uv.lock` file with `uv lock` command to lock dependencies,\nand keeps dependencies (both direct and transitive) to the exact same versions they were locked to with the previous\npackage manager, if a lock file was found.\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": null,
"version": "0.7.1",
"project_urls": {
"Changelog": "https://github.com/mkniewallner/migrate-to-uv/blob/main/CHANGELOG.md",
"Documentation": "https://mkniewallner.github.io/migrate-to-uv/",
"Funding": "https://github.com/sponsors/mkniewallner",
"Repository": "https://github.com/mkniewallner/migrate-to-uv"
},
"split_keywords": [
"uv",
" migrate",
" poetry",
" pipenv"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ee2d1d64386b0a2980c265dae9fdd80636c2ddda01c28fa0b86c62291734c5ef",
"md5": "064efff391a0771ef11d0d17fc843f45",
"sha256": "5149ddfafe17d132d8cad2f97a1661dec21339c5cb828f5675a9858c9cd05d1e"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "064efff391a0771ef11d0d17fc843f45",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1539586,
"upload_time": "2025-02-22T22:39:35",
"upload_time_iso_8601": "2025-02-22T22:39:35.143438Z",
"url": "https://files.pythonhosted.org/packages/ee/2d/1d64386b0a2980c265dae9fdd80636c2ddda01c28fa0b86c62291734c5ef/migrate_to_uv-0.7.1-py3-none-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "261a94c4be9930f6dae7c2415b348ed61affb894d64d2e2066b5caad1aad807e",
"md5": "28388afd40af819c795ee03b2b47460b",
"sha256": "114fc2de4e61927550d3daabd96fc65be74798185350945b3778f883bdfaa1a9"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "28388afd40af819c795ee03b2b47460b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1377872,
"upload_time": "2025-02-22T22:39:32",
"upload_time_iso_8601": "2025-02-22T22:39:32.672717Z",
"url": "https://files.pythonhosted.org/packages/26/1a/94c4be9930f6dae7c2415b348ed61affb894d64d2e2066b5caad1aad807e/migrate_to_uv-0.7.1-py3-none-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9ebce5408556e4434b4104ce3e1106f2ef6f40fad8f7b22874cdafa83f08bbc4",
"md5": "77b32992a92de2b193ecbe14dbe76069",
"sha256": "39974a70d70826fe565ea6e7537d51103056368e8d304bf58812f3b155d9ffb4"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "77b32992a92de2b193ecbe14dbe76069",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1487000,
"upload_time": "2025-02-22T22:39:24",
"upload_time_iso_8601": "2025-02-22T22:39:24.839084Z",
"url": "https://files.pythonhosted.org/packages/9e/bc/e5408556e4434b4104ce3e1106f2ef6f40fad8f7b22874cdafa83f08bbc4/migrate_to_uv-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "13fe1ddbd3420786a6bfa8093a5bed22d8b364e5b656d3d5d6ccf5f633adcede",
"md5": "76bae75fed79083b24f6bf8b8e3b7352",
"sha256": "b8332e06201ec5f4b7fdd20d82efc12c47643d015657d48f6900d52cd0932a13"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "76bae75fed79083b24f6bf8b8e3b7352",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1617142,
"upload_time": "2025-02-22T22:39:29",
"upload_time_iso_8601": "2025-02-22T22:39:29.287955Z",
"url": "https://files.pythonhosted.org/packages/13/fe/1ddbd3420786a6bfa8093a5bed22d8b364e5b656d3d5d6ccf5f633adcede/migrate_to_uv-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "69b1f759c7317274a43e4e7053966705e68fc0017ee3f1b12465a65da07d831e",
"md5": "107130739010831f9e87a205fe7c1a01",
"sha256": "b194cae44e4053737a40e738603e96f2e2bf2c9441a91afd0fd4e263473212b0"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "107130739010831f9e87a205fe7c1a01",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1504038,
"upload_time": "2025-02-22T22:39:27",
"upload_time_iso_8601": "2025-02-22T22:39:27.043729Z",
"url": "https://files.pythonhosted.org/packages/69/b1/f759c7317274a43e4e7053966705e68fc0017ee3f1b12465a65da07d831e/migrate_to_uv-0.7.1-py3-none-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3f38ab693a91655e8de2c8b65fe9801c94823ffad200264752fc8e8f9027344e",
"md5": "907a6491ee07a2064354792c811b57ba",
"sha256": "4bcc986a20ef0a4e204cc59efbaa1107f57a2ef248abaf544651f54b92dde28a"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "907a6491ee07a2064354792c811b57ba",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1670134,
"upload_time": "2025-02-22T22:39:30",
"upload_time_iso_8601": "2025-02-22T22:39:30.648454Z",
"url": "https://files.pythonhosted.org/packages/3f/38/ab693a91655e8de2c8b65fe9801c94823ffad200264752fc8e8f9027344e/migrate_to_uv-0.7.1-py3-none-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6505cb117266143e63a5bc992ccf42a78a0e074f0f7d0642e75659dde05e1d5e",
"md5": "583e7d28f907b9f193f90683060d14c8",
"sha256": "acb27af2c0941e7294d69794249a43faf50cac76845345752f6e0fe46c2e3e22"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "583e7d28f907b9f193f90683060d14c8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1405289,
"upload_time": "2025-02-22T22:39:41",
"upload_time_iso_8601": "2025-02-22T22:39:41.053383Z",
"url": "https://files.pythonhosted.org/packages/65/05/cb117266143e63a5bc992ccf42a78a0e074f0f7d0642e75659dde05e1d5e/migrate_to_uv-0.7.1-py3-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c1b2d7bd15646c986fad0f90ca1f7ec5616cec2db0bccc0a02665711c6767e63",
"md5": "8097932ba95ec6a082c8e384d19bf1d9",
"sha256": "73fb7249bea5da33b34cab0b9f45e73a18f3ae9d627e56a907466e797c57e57c"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1-py3-none-win_arm64.whl",
"has_sig": false,
"md5_digest": "8097932ba95ec6a082c8e384d19bf1d9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1278505,
"upload_time": "2025-02-22T22:39:38",
"upload_time_iso_8601": "2025-02-22T22:39:38.960464Z",
"url": "https://files.pythonhosted.org/packages/c1/b2/d7bd15646c986fad0f90ca1f7ec5616cec2db0bccc0a02665711c6767e63/migrate_to_uv-0.7.1-py3-none-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "03a90494967b54bb31e13dca7f460c535062b85b7f88a4b7ec66d54144b5c445",
"md5": "c85a00f3dee337be700a135f116797e8",
"sha256": "a873e8496e8db09b0025344e531a4f3e59bc5b3b39962fae09c855c70aff6d5c"
},
"downloads": -1,
"filename": "migrate_to_uv-0.7.1.tar.gz",
"has_sig": false,
"md5_digest": "c85a00f3dee337be700a135f116797e8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 107473,
"upload_time": "2025-02-22T22:39:37",
"upload_time_iso_8601": "2025-02-22T22:39:37.225903Z",
"url": "https://files.pythonhosted.org/packages/03/a9/0494967b54bb31e13dca7f460c535062b85b7f88a4b7ec66d54144b5c445/migrate_to_uv-0.7.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-22 22:39:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mkniewallner",
"github_project": "migrate-to-uv",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "migrate-to-uv"
}