`uv Pip Compile` Generates An Invalid `pyproject.toml` (uses Requirements.txt Format Instead Of TOML)
uv pip compile generates an invalid pyproject.toml (uses requirements.txt format instead of TOML)
Summary
When running uv pip compile -o pyproject.toml requirements.txt
, the generated pyproject.toml
is not in valid TOML format. Instead, it follows the requirements.txt
format, which causes parsing errors when trying to use uv for dependency management.
Description
The uv pip compile
command is used to generate a pyproject.toml
file from a requirements.txt
file. However, when this command is run, the generated pyproject.toml
file does not follow the proper TOML format. Instead, it contains a list of dependencies in the format of package==version
, which is similar to the requirements.txt
format.
This issue can cause problems when trying to use uv for dependency management, as the pyproject.toml
file is not in a format that can be parsed by uv.
Steps to Reproduce
To reproduce this issue, follow these steps:
- Prepare a
requirements.txt
file with the following content:
aiohappyeyeballs2.6.1 aiohttp3.11.16 aiosignal==1.3.2
2. Run the `uv` command to generate `pyproject.toml`:
```bash
uv pip compile -o pyproject.toml requirements.txt
- Open the generated
pyproject.toml
file. Instead of a proper TOML structure, it contains:
aiohappyeyeballs2.6.1 # via aiohttp aiohttp3.11.16 # via py-cord aiosignal==1.3.2 # via aiohttp
4. Try to install dependencies using `uv pip install -r pyproject.toml`. It results in the following error:
```bash
TOML parse error at line 3, column 18
invalid string
expected `"`, `'`
Expected Behavior
The generated pyproject.toml
should follow the proper TOML format, like this:
[project]
name = "my_project"
version = "0.1.0"
description = "My Project Description"
dependencies = [
"aiohappyeyeballs==2.6.1",
"aiohttp==3.11.16",
"aiosignal==1.3.2",
]
Workarounds
If you need to generate a proper pyproject.toml
file, you can use the following workarounds:
- Use
pip-compile
instead ofuv pip compile
: You can use thepip-compile
command from thepip-tools
package to generate apyproject.toml
file. This command will generate apyproject.toml
file in the proper TOML format.
pip install pip-tools pip-compile requirements.txt -o pyproject.toml
2. **Use a different tool to generate `pyproject.toml`**: There are other tools available that can generate a `pyproject.toml` file in the properL format. For example, you can use the `poetry` package to generate a `pyproject.toml` file.
```bash
poetry init
poetry add aiohappyeyeballs aiohttp aiosignal
poetry export -f pyproject.toml
Platform
This issue was reproduced on macOS M1.
Version
The version of uv
used to reproduce this issue is 0.6.12 (Homebrew 2025-04-02).
Python version
The Python version used to reproduce this issue is Python 3.12.9.
Conclusion
The uv pip compile
command generates an invalid pyproject.toml
file when run with a requirements.txt
file. This issue causes parsing errors when trying to use uv for dependency management. To work around this issue, you can use the pip-compile
command from the pip-tools
package or a different tool to generate a pyproject.toml
file in the proper TOML format.
uv pip compile generates an invalid pyproject.toml (uses requirements.txt format instead of TOML)
Q&A
Q: What is the issue with the uv pip compile
command?
A: The uv pip compile
command generates an invalid pyproject.toml
file when run with a requirements.txt
file. The generated pyproject.toml
file does not follow the proper TOML format, which causes parsing errors when trying to use uv for dependency management.
Q: What is the expected behavior of the uv pip compile
command?
A: The expected behavior of the uv pip compile
command is to generate a pyproject.toml
file in the proper TOML format. This file should contain the dependencies listed in the requirements.txt
file, along with other metadata such as the project name, version, and description.
Q: How can I reproduce this issue?
A: To reproduce this issue, follow these steps:
- Prepare a
requirements.txt
file with the following content:
aiohappyeyeballs2.6.1 aiohttp3.11.16 aiosignal==1.3.2
2. Run the `uv` command to generate `pyproject.toml`:
```bash
uv pip compile -o pyproject.toml requirements.txt
- Open the generated
pyproject.toml
file. Instead of a proper TOML structure, it contains:
aiohappyeyeballs2.6.1 # via aiohttp aiohttp3.11.16 # via py-cord aiosignal==1.3.2 # via aiohttp
4. Try to install dependencies using `uv pip install -r pyproject.toml`. It results in the following error:
```bash
TOML parse error at line 3, column 18
invalid string
expected `"`, `'`
Q: What are the workarounds for this issue?
A: There are two workarounds for this issue:
- Use
pip-compile
instead ofuv pip compile
: You can use thepip-compile
command from thepip-tools
package to generate apyproject.toml
file. This command will generate apyproject.toml
file in the proper TOML format.
pip install pip-tools pip-compile requirements.txt -o pyproject.toml
2. **Use a different tool to generate `pyproject.toml`**: There are other tools available that can generate a `pyproject.toml` file in the proper TOML format. For example, you can use the `poetry` package to generate a `pyproject.toml` file.
```bash
poetry init
poetry add aiohappyeyeballs aiohttp aiosignal
poetry export -f pyproject.toml
Q: What is the platform and version of uv
used to reproduce this issue?
A: This issue was reproduced on macOS M1 with uv
version 0.6.12 (Homebrew 2025-04-02) and Python version .12.9.
Q: How can I contribute to this issue?
A: If you are experiencing this issue, you can contribute to it by providing more information about your environment and the steps you took to reproduce the issue. You can also try to fix the issue by submitting a pull request to the uv
repository.