# Packages

Packages allow you to utilize GitLab as a private repository for a variety of common package managers, as well as GitLab’s generic package registry.

## Project Packages

### Reference

- v4 API:

  - `gitlab.v4.objects.ProjectPackage`

  - `gitlab.v4.objects.ProjectPackageManager`

  - `gitlab.v4.objects.Project.packages`

- GitLab API: https://docs.gitlab.com/ee/api/packages.html#within-a-project

### Examples

List the packages in a project:

    packages = project.packages.list()

Filter the results by `package_type` or `package_name`

    packages = project.packages.list(package_type='pypi')

Get a specific package of a project by id:

    package = project.packages.get(1)

Delete a package from a project:

    package.delete()
    # or
    project.packages.delete(package.id)

## Group Packages

### Reference

- v4 API:

  - `gitlab.v4.objects.GroupPackage`

  - `gitlab.v4.objects.GroupPackageManager`

  - `gitlab.v4.objects.Group.packages`

- GitLab API: https://docs.gitlab.com/ee/api/packages.html#within-a-group

### Examples

List the packages in a group:

    packages = group.packages.list()

Filter the results by `package_type` or `package_name`

    packages = group.packages.list(package_type='pypi')

## Project Package Files

### Reference

- v4 API:

  - `gitlab.v4.objects.ProjectPackageFile`

  - `gitlab.v4.objects.ProjectPackageFileManager`

  - `gitlab.v4.objects.ProjectPackage.package_files`

- GitLab API: https://docs.gitlab.com/ee/api/packages.html#list-package-files

### Examples

List package files for package in project:

    package = project.packages.get(1)
    package_files = package.package_files.list()

## Generic Packages

You can use python-gitlab to upload and download generic packages.

### Reference

- v4 API:

  - `gitlab.v4.objects.GenericPackage`

  - `gitlab.v4.objects.GenericPackageManager`

  - `gitlab.v4.objects.Project.generic_packages`

- GitLab API: https://docs.gitlab.com/ee/user/packages/generic_packages

### Examples

Upload a generic package to a project:

    project = gl.projects.get(1, lazy=True)
    package = project.generic_packages.upload(
        package_name="hello-world",
        package_version="v1.0.0",
        file_name="hello.tar.gz",
        path="/path/to/local/hello.tar.gz"
    )

Download a project’s generic package:

    project = gl.projects.get(1, lazy=True)
    package = project.generic_packages.download(
        package_name="hello-world",
        package_version="v1.0.0",
        file_name="hello.tar.gz",
    )

Hint

You can use the Packages API described above to find packages and retrieve the metadata you need download them.