65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
import re
|
|
import sys
|
|
|
|
from pipenv.utils.dependencies import get_lockfile_section_using_pipfile_category
|
|
from pipenv.utils.requirements import requirements_from_lockfile
|
|
from pipenv.vendor import click
|
|
|
|
|
|
def generate_requirements(
|
|
project,
|
|
dev=False,
|
|
dev_only=False,
|
|
include_hashes=False,
|
|
include_markers=True,
|
|
categories="",
|
|
from_pipfile=False,
|
|
):
|
|
lockfile = project.load_lockfile(expand_env_vars=False)
|
|
pipfile_root_package_names = project.pipfile_package_names["combined"]
|
|
|
|
for i, package_index in enumerate(lockfile["_meta"]["sources"]):
|
|
prefix = "-i" if i == 0 else "--extra-index-url"
|
|
click.echo(" ".join([prefix, package_index["url"]]))
|
|
|
|
deps = {}
|
|
categories_list = re.split(r", *| ", categories) if categories else []
|
|
|
|
if categories_list:
|
|
for category in categories_list:
|
|
category = get_lockfile_section_using_pipfile_category(category.strip())
|
|
category_deps = lockfile.get(category, {})
|
|
if from_pipfile:
|
|
category_deps = {
|
|
k: v
|
|
for k, v in category_deps.items()
|
|
if k in pipfile_root_package_names
|
|
}
|
|
deps.update(category_deps)
|
|
else:
|
|
if dev or dev_only:
|
|
dev_deps = lockfile["develop"]
|
|
if from_pipfile:
|
|
dev_deps = {
|
|
k: v for k, v in dev_deps.items() if k in pipfile_root_package_names
|
|
}
|
|
deps.update(dev_deps)
|
|
if not dev_only:
|
|
default_deps = lockfile["default"]
|
|
if from_pipfile:
|
|
default_deps = {
|
|
k: v
|
|
for k, v in default_deps.items()
|
|
if k in pipfile_root_package_names
|
|
}
|
|
deps.update(default_deps)
|
|
|
|
pip_installable_lines = requirements_from_lockfile(
|
|
deps, include_hashes=include_hashes, include_markers=include_markers
|
|
)
|
|
|
|
for line in pip_installable_lines:
|
|
click.echo(line)
|
|
|
|
sys.exit(0)
|