From 97868e53f42ace392bf8935131e70ec5f1fce81a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 08:25:16 +0000 Subject: [PATCH 1/3] Fix flatdict Python 3.12 build issue with pre-built wheel and updated docs Co-authored-by: raffidahmad <72741036+raffidahmad@users.noreply.github.com> --- INSTALL.md | 119 ++++++++++++++++++ README.rst | 13 +- poetry.lock | 33 ++++- pyproject.toml | 3 +- vendor-wheels/flatdict-4.0.1-py3-none-any.whl | Bin 0 -> 6969 bytes 5 files changed, 160 insertions(+), 8 deletions(-) create mode 100644 INSTALL.md create mode 100644 vendor-wheels/flatdict-4.0.1-py3-none-any.whl diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 00000000..1a651fb1 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,119 @@ +# Installation Guide for ecs_composex + +## Standard Installation + +For most Python versions (3.9-3.11), installation is straightforward: + +```bash +pip install ecs-composex +``` + +## Python 3.12+ Installation + +### Issue Background + +The `flatdict` package (version 4.0.1), which is a transitive dependency through `compose-x-common`, has a build issue with Python 3.12+. The package's `setup.py` imports `pkg_resources`, which is deprecated and no longer available by default in Python 3.12's setuptools. + +### Solution 1: Using the Provided Pre-built Wheel (Recommended) + +If you've cloned this repository, use the pre-built wheel provided in the `vendor-wheels/` directory: + +```bash +git clone https://github.com/compose-x/ecs_composex.git +cd ecs_composex +python3 -m venv venv +source venv/bin/activate +pip install --upgrade pip setuptools + +# Install flatdict from the provided wheel +pip install vendor-wheels/flatdict-4.0.1-py3-none-any.whl + +# Now install ecs-composex +pip install . +``` + +### Solution 2: Install from PyPI + +When installing from PyPI (not from source), you can install setuptools first: + +```bash +python3 -m venv venv +source venv/bin/activate +pip install --upgrade pip setuptools +pip install ecs-composex +``` + +**Note**: If you still encounter issues, try installing flatdict separately first: + +```bash +# Build flatdict from source with setuptools available +pip install setuptools>=65.5.0 +pip download --no-deps --no-binary=:all: flatdict==4.0.1 +tar -xzf flatdict-4.0.1.tar.gz +cd flatdict-4.0.1 + +# Patch the setup.py to remove pkg_resources requirement +cat > setup.py << 'EOF' +import setuptools +setuptools.setup() +EOF + +# Create proper build configuration +cat > pyproject.toml << 'EOF' +[build-system] +requires = ["setuptools>=39.2", "wheel"] +build-backend = "setuptools.build_meta" +EOF + +# Build and install +pip install . +cd .. + +# Now install ecs-composex +pip install ecs-composex +``` + +### Solution 3: Using Poetry + +If you're using Poetry for dependency management: + +```bash +poetry install +``` + +Poetry should handle the dependency resolution automatically with the setuptools dependency we've added. + +## Verification + +After installation, verify that ecs-composex is installed correctly: + +```bash +ecs-compose-x --version +``` + +## Troubleshooting + +If you encounter the error: +``` +ModuleNotFoundError: No module named 'pkg_resources' +``` + +This confirms the flatdict build issue. Use Solution 1 or Solution 2 above to resolve it. + +## Development Installation + +For development purposes: + +```bash +git clone https://github.com/compose-x/ecs_composex.git +cd ecs_composex +python3 -m venv venv +source venv/bin/activate +pip install --upgrade pip setuptools + +# Install flatdict from provided wheel +pip install vendor-wheels/flatdict-4.0.1-py3-none-any.whl + +# Install in development mode +pip install -e . +``` diff --git a/README.rst b/README.rst index 0852cdd7..1fbdb0e2 100644 --- a/README.rst +++ b/README.rst @@ -53,15 +53,26 @@ Useful Links Installation ===================== +.. note:: + + **Python 3.12+ Users**: Due to a dependency issue with ``flatdict`` 4.0.1, you may need to install it separately first. + A pre-built wheel is provided in the ``vendor-wheels/`` directory of this repository. + .. code-block:: bash # Inside a python virtual environment python3 -m venv venv source venv/bin/activate - pip install pip -U + pip install pip setuptools -U + + # For Python 3.12+, install flatdict first using the provided wheel + pip install vendor-wheels/flatdict-4.0.1-py3-none-any.whl # If installing from repository + # Or download from PyPI with: pip install flatdict==4.0.1 --no-build-isolation + pip install ecs-composex # For your user only + pip install --upgrade setuptools pip install ecs-composex --user Usage diff --git a/poetry.lock b/poetry.lock index 8d2a8df0..cdb8cb9a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. [[package]] name = "alabaster" @@ -98,7 +98,7 @@ win_unicode_console = {version = "*", markers = "python_version <= \"3.9\""} [package.extras] develop = ["PyHamcrest (<2.0) ; python_version < \"3.0\"", "PyHamcrest (>=2.0.2) ; python_version >= \"3.0\"", "build (>=0.5.1)", "coverage (>=5.0)", "invoke (>=1.7.0) ; python_version >= \"3.6\"", "invoke (>=1.7.0,<2.0) ; python_version < \"3.6\"", "mock (<4.0) ; python_version < \"3.6\"", "mock (>=4.0) ; python_version >= \"3.6\"", "modernize (>=0.5)", "path (>=13.1.0) ; python_version >= \"3.5\"", "path.py (>=11.5.0) ; python_version < \"3.5\"", "pycmd", "pylint", "pytest (>=4.2,<5.0) ; python_version < \"3.0\"", "pytest (>=5.0) ; python_version >= \"3.0\"", "pytest-cov", "pytest-html (>=1.19.0,<2.0) ; python_version < \"3.0\"", "pytest-html (>=2.0) ; python_version >= \"3.0\"", "ruff ; python_version >= \"3.7\"", "tox (>=3.28.0,<4.0)", "twine (>=1.13.0)", "virtualenv (<20.22.0) ; python_version < \"3.7\"", "virtualenv (>=20.26.6) ; python_version >= \"3.7\""] -docs = ["furo (>=2024.04.27) ; python_version >= \"3.8\"", "sphinx (>=1.6,<4.4) ; python_version < \"3.7\"", "sphinx (>=7.4.0) ; python_version >= \"3.7\"", "sphinx-copybutton (>=0.5.2) ; python_version >= \"3.7\"", "sphinxcontrib-applehelp (>=1.0.8) ; python_version >= \"3.7\"", "sphinxcontrib-htmlhelp (>=2.0.5) ; python_version >= \"3.7\""] +docs = ["furo (>=2024.4.27) ; python_version >= \"3.8\"", "sphinx (>=1.6,<4.4) ; python_version < \"3.7\"", "sphinx (>=7.4.0) ; python_version >= \"3.7\"", "sphinx-copybutton (>=0.5.2) ; python_version >= \"3.7\"", "sphinxcontrib-applehelp (>=1.0.8) ; python_version >= \"3.7\"", "sphinxcontrib-htmlhelp (>=2.0.5) ; python_version >= \"3.7\""] formatters = ["behave-html-formatter (>=0.9.10) ; python_version >= \"3.6\"", "behave-html-pretty-formatter (>=1.9.1) ; python_version >= \"3.6\""] testing = ["PyHamcrest (<2.0) ; python_version < \"3.0\"", "PyHamcrest (>=2.0.2) ; python_version >= \"3.0\"", "assertpy (>=1.1)", "chardet", "freezegun (>=1.5.1) ; python_version > \"3.7\"", "mock (<4.0) ; python_version < \"3.6\"", "mock (>=4.0) ; python_version >= \"3.6\"", "path (>=13.1.0) ; python_version >= \"3.5\"", "path.py (>=11.5.0,<13.0) ; python_version < \"3.5\"", "pytest (<5.0) ; python_version < \"3.0\"", "pytest (>=5.0) ; python_version >= \"3.0\"", "pytest-html (>=1.19.0,<2.0) ; python_version < \"3.0\"", "pytest-html (>=2.0) ; python_version >= \"3.0\""] @@ -1547,7 +1547,7 @@ files = [ [package.dependencies] attrs = ">=22.2.0" -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rpds-py = ">=0.7.1" @@ -2785,10 +2785,10 @@ files = [ ] [package.dependencies] -botocore = ">=1.37.4,<2.0a.0" +botocore = ">=1.37.4,<2.0a0" [package.extras] -crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] +crt = ["botocore[crt] (>=1.37.4,<2.0a0)"] [[package]] name = "schema" @@ -2802,6 +2802,27 @@ files = [ {file = "schema-0.7.8.tar.gz", hash = "sha256:e86cc08edd6fe6e2522648f4e47e3a31920a76e82cce8937535422e310862ab5"}, ] +[[package]] +name = "setuptools" +version = "82.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-82.0.0-py3-none-any.whl", hash = "sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0"}, + {file = "setuptools-82.0.0.tar.gz", hash = "sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.13.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.18.*)", "pytest-mypy"] + [[package]] name = "six" version = "1.17.0" @@ -3335,4 +3356,4 @@ ecrscan = ["ecr-scan-reporter"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "0ec3a69aa867c459471ccd014a227e267c6f30cd858a7f5dc426524ce764b096" +content-hash = "a041b7857116c05cd76f3d38439724a8e553907566ef5099d754d096dd8e8714" diff --git a/pyproject.toml b/pyproject.toml index bbad4c0d..8fc2a932 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ retry2 = "^0.9" Jinja2 = "^3.1.2" docker = ">=6.0.1,<8.0" troposphere-awscommunity-applicationautoscaling-scheduledaction = "^0.1.1" +setuptools = ">=65.5.0" [tool.poetry.group.dev.dependencies] isort = "^5.13" @@ -138,5 +139,5 @@ omit = [ ] [build-system] -requires = ["poetry-core>=1.9.0,<2.0"] +requires = ["poetry-core>=1.9.0,<2.0", "setuptools>=65.5.0"] build-backend = "poetry.core.masonry.api" diff --git a/vendor-wheels/flatdict-4.0.1-py3-none-any.whl b/vendor-wheels/flatdict-4.0.1-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..2637ac079a474ca215a36e25d0323358962e9df6 GIT binary patch literal 6969 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 literal 0 HcmV?d00001 From c25e178ec16d4c89882e2ea4998077f46e25bee7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 08:26:34 +0000 Subject: [PATCH 2/3] Address code review feedback Co-authored-by: raffidahmad <72741036+raffidahmad@users.noreply.github.com> --- INSTALL.md | 4 +++- README.rst | 1 - pyproject.toml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 1a651fb1..e3fbb57b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -46,8 +46,10 @@ pip install ecs-composex **Note**: If you still encounter issues, try installing flatdict separately first: ```bash -# Build flatdict from source with setuptools available +# Install setuptools as a prerequisite pip install setuptools>=65.5.0 + +# Download flatdict source pip download --no-deps --no-binary=:all: flatdict==4.0.1 tar -xzf flatdict-4.0.1.tar.gz cd flatdict-4.0.1 diff --git a/README.rst b/README.rst index 1fbdb0e2..8d4f72e7 100644 --- a/README.rst +++ b/README.rst @@ -67,7 +67,6 @@ Installation # For Python 3.12+, install flatdict first using the provided wheel pip install vendor-wheels/flatdict-4.0.1-py3-none-any.whl # If installing from repository - # Or download from PyPI with: pip install flatdict==4.0.1 --no-build-isolation pip install ecs-composex diff --git a/pyproject.toml b/pyproject.toml index 8fc2a932..b976a29c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -139,5 +139,5 @@ omit = [ ] [build-system] -requires = ["poetry-core>=1.9.0,<2.0", "setuptools>=65.5.0"] +requires = ["poetry-core>=1.9.0,<2.0"] build-backend = "poetry.core.masonry.api" From d6fc907a623a4e31396fa591ef1932ded8848c2d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 08:53:00 +0000 Subject: [PATCH 3/3] Include vendor-wheels directory in distribution packages Co-authored-by: raffidahmad <72741036+raffidahmad@users.noreply.github.com> --- MANIFEST.in | 1 + pyproject.toml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index fd8bd5bc..fc199259 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -13,3 +13,4 @@ recursive-exclude * *.py[co] recursive-include tests * recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif recursive-include ecs_composex *spec.json *perms.json *.j2 +recursive-include vendor-wheels *.whl diff --git a/pyproject.toml b/pyproject.toml index b976a29c..35c305ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,8 @@ include = [ "MANIFEST.in", "NOTICES.rst", "ecs_composex/**/*.json", - "ecs_composex/**/*.j2" + "ecs_composex/**/*.j2", + "vendor-wheels/**/*.whl" ] exclude = ["*.pyc", "*~", "*pycache*"]