← Back to issue list

`python` and `poetry` plugins include `lib64` symlink as a second copy of the venv

View original Github issue

Metadata

Project
charmcraft
Number
#1966
Type
issue
State
closed
Author
lengau
Labels
—
Created
Updated
Closed

Current evaluation

Fixed by merged PR #1968 (commit dd636296): get_venv_cleanup_commands() in charmcraft/utils/parts.py now removes the venv lib64 symlink if it is a symlink, leaving real dirs intact. Integration and unit tests added.

Resolution: closed resolved

Reason: PR #1968 by lengau was merged as commit dd636296, adding a lib64-symlink removal step to the python/poetry venv cleanup in charmcraft/utils/parts.py. Integration tests in tests/integration/parts/plugins/test_python.py and test_poetry.py assert the venv lib64 symlink is no longer packed.

Evaluated by: mr-cal-bot

No scores available.

Issue body

### Bug Description When using the `python` or `poetry` plugin, a second copy of the `lib` directory is created in `lib64` because it's a symlink. The charm works fine without that symlink, so we should just remove `lib64` if it's a symlink. (If it's a directory, leave it.) ### To Reproduce Pack the charm below and view it in a zip file viewer ### Environment irrelevant ### charmcraft.yaml ```yaml # This file configures Charmcraft. # See https://juju.is/docs/sdk/charmcraft-config for guidance. # (Required) # The charm package name, no spaces # See https://juju.is/docs/sdk/naming#heading--naming-charms for guidance. name: basic-charm # (Required) # The charm type, either 'charm' or 'bundle'. type: charm # (Recommended) title: Charm Template # (Required) summary: A very short one-line summary of the charm. # (Required) description: | A single sentence that says what the charm is, concisely and memorably. A paragraph of one to three short sentences, that describe what the charm does. A third paragraph that explains what need the charm meets. Finally, a paragraph that describes whom the charm is useful for. # (Required for 'charm' type) # A list of environments (OS version and architecture) where charms must be # built on and run on. bases: - build-on: - name: ubuntu channel: "22.04" run-on: - name: ubuntu channel: "22.04" # (Optional) Configuration options for the charm # This config section defines charm config options, and populates the Configure # tab on Charmhub. # More information on this section at https://juju.is/docs/sdk/charmcraft-yaml#heading--config # General configuration documentation: https://juju.is/docs/sdk/config config: options: # An example config option to customise the log level of the workload log-level: description: | Configures the log level of gunicorn. Acceptable values are: "info", "debug", "warning", "error" and "critical" default: "info" type: string # The containers and resources metadata apply to Kubernetes charms only. # See https://juju.is/docs/sdk/metadata-reference for a checklist and guidance. # Remove them if not required. # Your workload’s containers. containers: httpbin: resource: httpbin-image # This field populates the Resources tab on Charmhub. resources: # An OCI image resource for each container listed above. # You may remove this if your charm will run without a workload sidecar container. httpbin-image: type: oci-image description: OCI image for httpbin # The upstream-source field is ignored by Juju. It is included here as a # reference so the integration testing suite knows which image to deploy # during testing. This field is also used by the 'canonical/charming-actions' # Github action for automated releasing. upstream-source: kennethreitz/httpbin parts: my-charm: plugin: python source: . python-requirements: [requirements.txt] override-build: | /usr/bin/python3 -m pip install -U pip@https://files.pythonhosted.org/packages/d4/55/90db48d85f7689ec6f81c0db0622d704306c5284850383c090e6c7195a5c/pip-24.2-py3-none-any.whl craftctl default ``` ### Relevant log output ```shell n/a ```

Evaluation history

Date Model Scores Action Summary
stealth/space-bunny-alpha — closed resolved Fixed by merged PR #1968 (commit dd636296): get_venv_cleanup_commands() in charmcraft/utils/parts.py now removes the venv lib64 symlink if it is a symlink, leaving real dirs intact. Integration and unit tests added.
stealth/space-bunny-alpha — closed resolved Merged #1968 (dd636296) to exclude the virtual-environment lib64 symlink from python and poetry charms.
qwen3.6-35b-a3b-mtp-q6 — — The python and poetry plugins incorrectly copy the lib64 symlink as a duplicate directory. The report was closed without a fix or discussion, indicating it was abandoned.
qwen/qwen3.6-35b-a3b — — The python and poetry plugin lib64 symlink bug was closed without a fix. Activity was limited to an automated Jira sync, suggesting the report was abandoned or deferred to internal tracking.
qwen/qwen3.6-35b-a3b — — Abandoned. The report described python and poetry plugins duplicating the venv lib directory via a lib64 symlink. No fix was implemented, and the ticket was closed after syncing to internal Jira tracking.
qwen3.6-35b-a3b-mtp-q6 — — Closed without a fix or pull request. No developer response or resolution was provided, indicating the report was likely abandoned or marked stale after the initial bug description.

Update history

No update history recorded yet.

Related work

  • Likely Fixed By: canonical/charmcraft#1968 (confidence 99%)

    Merged PR titled 'fix(python,poetry): remove duplicate files in the charm' (dd636296), explicitly closing #1966.

  • Related To: canonical/charmcraft#2864 (confidence 45%)

    Later commit 430ee59a 'fix: exclude .venv and .tox from source pull' addresses the same class of duplicate-file problem in pulled sources.

Related issues

Issue Project State Summary Similarity
#1968 fix(python,poetry): remove duplicate files in the charm charmcraft merged PR #1968 by lengau merged (commit dd636296), adding venv cleanup that removes the lib64 symlink so python/poetry charms no longer pack duplicate files; closes issue #1966.
76%
#1899 feat: add Python and Poetry plugins charmcraft merged Merged into main via commit 8b748f3e, adding Charmcraft-specific Python and Poetry plugins with charm-oriented venv, pip, source-copy, and binary defaults.
70%