Hi everyone, running into an error when the flow i...
# ask-metaflow
q
Hi everyone, running into an error when the flow is Boostrapping the conda virtual environment running on arm (M1) laptop:
Copy code
mbp in ...path on ξ‚  branch [!?] via πŸ…’ dev 
took 6s βœ— python test.py --environment=conda --datastore=s3 run
Metaflow 2.11.10 executing Test for user:pmiron
Project: test, Branch: user.pmiron
Validating your flow...
    The graph looks good!
Running pylint...
    Pylint not found, so extra checks are disabled.
Bootstrapping virtual environment(s) ...
    Micromamba ran into an error while setting up environment:
    command '/opt/homebrew/bin/micromamba create --yes --quiet --dry-run --no-extra-safety-checks --repodata-ttl=86400 --retry-clean-cache --prefix=/var/folders/_6/hdhmyzr120jgn1d_45q65zkh0000gn/T/tmp8oq8ubfo/prefix --channel=conda-forge --channel=defaults  ... ... ... zstd==1.5.6 python==3.11.9' returned error (1)
    nothing provides __glibc >=2.17,<3.0.a0 needed by nss-3.98-h1d7d5a4_0
...
...
    nothing provides __glibc >=2.17,<3.0.a0 needed by libgdal-3.4.1-h42fb820_3
My guess right now is that those pinned dependencies solved using
"linux-64"
as the platform can't be solve on arm64. Is there a way to pass the platform to make sure it is bootstrapped on
linux-64
? For example in Docker, one can passed the
--platform linux/amd64
parameter.
βœ… 1
a
πŸ‘€
d
what environment are you trying to resolve? It should resolve for linux-64 if you are trying to run for kubernetes/batch/etc.
q
Oh ok.. so it might be something else then. This is my environment:
Copy code
name: env
channels:
  - conda-forge
  - nodefaults
dependencies:
  - geopandas
  - pandas
  - python=3.11
  - pyarrow
  - numpy
  - s3fs
which I resolved for
linux-64
to get the following pinned dependencies dictionary:
Copy code
dependencies = {
    "_libgcc_mutex": "0.1",
    "_openmp_mutex": "4.5",
    "aiobotocore": "2.12.2",
    "aiohttp": "3.9.5",
    "aioitertools": "0.11.0",
    "aiosignal": "1.3.1",
    "attrs": "23.2.0",
    "aws-c-auth": "0.7.18",
    "aws-c-cal": "0.6.11",
    "aws-c-common": "0.9.15",
    "aws-c-compression": "0.2.18",
    "aws-c-event-stream": "0.4.2",
    "aws-c-http": "0.8.1",
    "aws-c-io": "0.14.7",
    "aws-c-mqtt": "0.10.4",
    "aws-c-s3": "0.5.7",
    "aws-c-sdkutils": "0.1.15",
    "aws-checksums": "0.1.18",
    "aws-crt-cpp": "0.26.8",
    "aws-sdk-cpp": "1.11.267",
    "azure-core-cpp": "1.11.1",
    "azure-identity-cpp": "1.6.0",
    "azure-storage-blobs-cpp": "12.10.0",
    "azure-storage-common-cpp": "12.5.0",
    "blosc": "1.21.5",
    "botocore": "1.34.51",
    "branca": "0.7.2",
    "brotli": "1.1.0",
    "brotli-bin": "1.1.0",
    "brotli-python": "1.1.0",
    "bzip2": "1.0.8",
    "c-ares": "1.28.1",
    "ca-certificates": "2024.2.2",
    "cairo": "1.18.0",
    "certifi": "2024.2.2",
    "cfitsio": "4.4.0",
    "charset-normalizer": "3.3.2",
    "click": "8.1.7",
    "click-plugins": "1.1.1",
    "cligj": "0.7.2",
    "contourpy": "1.2.1",
    "cycler": "0.12.1",
    "expat": "2.6.2",
    "fiona": "1.9.6",
    "fmt": "10.2.1",
    "folium": "0.16.0",
    "font-ttf-dejavu-sans-mono": "2.37",
    "font-ttf-inconsolata": "3.000",
    "font-ttf-source-code-pro": "2.038",
    "font-ttf-ubuntu": "0.83",
    "fontconfig": "2.14.2",
    "fonts-conda-ecosystem": "1",
    "fonts-conda-forge": "1",
    "fonttools": "4.51.0",
    "freetype": "2.12.1",
    "freexl": "2.0.0",
    "frozenlist": "1.4.1",
    "fsspec": "2024.3.1",
    "gdal": "3.8.5",
    "geopandas": "0.14.4",
    "geopandas-base": "0.14.4",
    "geos": "3.12.1",
    "geotiff": "1.7.1",
    "gflags": "2.2.2",
    "giflib": "5.2.2",
    "glog": "0.7.0",
    "hdf4": "4.2.15",
    "hdf5": "1.14.3",
    "icu": "73.2",
    "idna": "3.7",
    "jinja2": "3.1.3",
    "jmespath": "1.0.1",
    "joblib": "1.4.2",
    "json-c": "0.17",
    "kealib": "1.5.3",
    "keyutils": "1.6.1",
    "kiwisolver": "1.4.5",
    "krb5": "1.21.2",
    "lcms2": "2.16",
    "ld_impl_linux-64": "2.40",
    "lerc": "4.0.0",
    "libabseil": "20240116.2",
    "libaec": "1.1.3",
    "libarchive": "3.7.2",
    "libarrow": "15.0.2",
    "libarrow-acero": "15.0.2",
    "libarrow-dataset": "15.0.2",
    "libarrow-flight": "15.0.2",
    "libarrow-flight-sql": "15.0.2",
    "libarrow-gandiva": "15.0.2",
    "libarrow-substrait": "15.0.2",
    "libblas": "3.9.0",
    "libboost-headers": "1.84.0",
    "libbrotlicommon": "1.1.0",
    "libbrotlidec": "1.1.0",
    "libbrotlienc": "1.1.0",
    "libcblas": "3.9.0",
    "libcrc32c": "1.1.2",
    "libcurl": "8.7.1",
    "libdeflate": "1.20",
    "libedit": "3.1.20191231",
    "libev": "4.33",
    "libevent": "2.1.12",
    "libexpat": "2.6.2",
    "libffi": "3.4.2",
    "libgcc-ng": "13.2.0",
    "libgdal": "3.8.5",
    "libgfortran-ng": "13.2.0",
    "libgfortran5": "13.2.0",
    "libglib": "2.80.0",
    "libgomp": "13.2.0",
    "libgoogle-cloud": "2.23.0",
    "libgoogle-cloud-storage": "2.23.0",
    "libgrpc": "1.62.2",
    "libiconv": "1.17",
    "libjpeg-turbo": "3.0.0",
    "libkml": "1.3.0",
    "liblapack": "3.9.0",
    "libllvm16": "16.0.6",
    "libnetcdf": "4.9.2",
    "libnghttp2": "1.58.0",
    "libnl": "3.9.0",
    "libnsl": "2.0.1",
    "libopenblas": "0.3.27",
    "libparquet": "15.0.2",
    "libpng": "1.6.43",
    "libpq": "16.2",
    "libprotobuf": "4.25.3",
    "libre2-11": "2023.09.01",
    "librttopo": "1.1.0",
    "libspatialindex": "1.9.3",
    "libspatialite": "5.1.0",
    "libsqlite": "3.45.3",
    "libssh2": "1.11.0",
    "libstdcxx-ng": "13.2.0",
    "libthrift": "0.19.0",
    "libtiff": "4.6.0",
    "libutf8proc": "2.8.0",
    "libuuid": "2.38.1",
    "libwebp-base": "1.4.0",
    "libxcb": "1.15",
    "libxcrypt": "4.4.36",
    "libxml2": "2.12.6",
    "libzip": "1.10.1",
    "libzlib": "1.2.13",
    "lz4-c": "1.9.4",
    "lzo": "2.10",
    "mapclassify": "2.6.1",
    "markupsafe": "2.1.5",
    "matplotlib-base": "3.8.4",
    "minizip": "4.0.5",
    "multidict": "6.0.5",
    "munkres": "1.1.4",
    "ncurses": "6.4.20240210",
    "networkx": "3.3",
    "nspr": "4.35",
    "nss": "3.98",
    "numpy": "1.26.4",
    "openjpeg": "2.5.2",
    "openssl": "3.3.0",
    "orc": "2.0.0",
    "packaging": "24.0",
    "pandas": "2.2.2",
    "pcre2": "10.43",
    "pillow": "10.3.0",
    "pip": "24.0",
    "pixman": "0.43.2",
    "poppler": "24.04.0",
    "poppler-data": "0.4.12",
    "postgresql": "16.2",
    "proj": "9.4.0",
    "pthread-stubs": "0.4",
    "pyarrow": "15.0.2",
    "pyparsing": "3.1.2",
    "pyproj": "3.6.1",
    "pysocks": "1.7.1",
    "python-dateutil": "2.9.0",
    "python-tzdata": "2024.1",
    "python_abi": "3.11",
    "pytz": "2024.1",
    "rdma-core": "51.0",
    "re2": "2023.09.01",
    "readline": "8.2",
    "requests": "2.31.0",
    "rtree": "1.2.0",
    "s2n": "1.4.12",
    "s3fs": "2024.3.1",
    "scikit-learn": "1.4.2",
    "scipy": "1.13.0",
    "setuptools": "69.5.1",
    "shapely": "2.0.4",
    "six": "1.16.0",
    "snappy": "1.2.0",
    "spdlog": "1.13.0",
    "sqlite": "3.45.3",
    "threadpoolctl": "3.5.0",
    "tiledb": "2.22.0",
    "tk": "8.6.13",
    "typing_extensions": "4.11.0",
    "tzcode": "2024a",
    "tzdata": "2024a",
    "ucx": "1.15.0",
    "uriparser": "0.9.7",
    "urllib3": "2.0.7",
    "wheel": "0.43.0",
    "wrapt": "1.16.0",
    "xerces-c": "3.2.5",
    "xorg-kbproto": "1.0.7",
    "xorg-libice": "1.1.1",
    "xorg-libsm": "1.2.4",
    "xorg-libx11": "1.8.9",
    "xorg-libxau": "1.0.11",
    "xorg-libxdmcp": "1.1.3",
    "xorg-libxext": "1.3.4",
    "xorg-libxrender": "0.9.11",
    "xorg-renderproto": "0.11.1",
    "xorg-xextproto": "7.3.0",
    "xorg-xproto": "7.0.31",
    "xyzservices": "2024.4.0",
    "xz": "5.2.6",
    "yarl": "1.9.4",
    "zlib": "1.2.13",
    "zstd": "1.5.6"
}
@conda_base(libraries=dependencies, python='3.11.9')
that I use in the flow. And yes it is on Kubernetes,
Copy code
@conda_base(libraries=dependencies, python=python_version)
class Test(FlowSpec):
    @kubernetes(cpu=2, memory=8000, disk=10000)
    @step
    def start(self):
        self.next(self.end)

    @conda(disabled=True)
    @step
    def end(self):
        pass


if __name__ == "__main__":
    Test()
d
I am not sure why it doesn’t work with the mainline conda/pypi decorators but it should work with the netflix extension ones. I just resolved it on my m2 mac:
Copy code
metaflow environment resolve --arch=linux-64 --dry-run -f philippe.yml;
where the yml file has:
Copy code
dependencies:
  - geopandas
  - pandas
  - python=3.11
  - pyarrow
  - numpy
  - s3fs
and get:
Copy code
### Environment for architecture linux-64
Environment of type conda-only full hash 59f0dad7faf45217e16bb1bdd4f174a51513dfe3:03390c90372f5f07844ba32bb331dc557fb1f91f
Arch linux-64
Available on linux-64

Resolved on 2024-05-03 11:33:14.606793
Resolved by rcledat

User-requested packages sys::__glibc==2.27, conda::boto3==>=1.14.0, conda::cffi==>=1.13.0,!=1.15.0, conda::fastavro==>=1.6.0, conda::geopandas, conda::numpy, conda::pandas==>=0.24.0, conda::pyarrow==>=0.17.1, conda::python==3.11, conda::requests==>=2.21.0, conda::s3fs
User sources conda::conda-forge

Conda Packages installed _libgcc_mutex==0.1-conda_forge, _openmp_mutex==4.5-2_gnu, attrs==23.2.0-pyh71513ae_0, aws-c-auth==0.7.18-he0b1f16_0, aws-c-cal==0.6.11-heb1d5e4_0, aws-c-common==0.9.15-hd590300_0, aws-c-compression==0.2.18-hce8ee76_3, aws-c-event-stream==0.4.2-h01f5eca_8, aws-c-http==0.8.1-hdb68c23_10, aws-c-io==0.14.7-hbfbeace_6, aws-c-mqtt==0.10.4-h50844eb_0, aws-c-s3==0.5.7-h6be9164_2, aws-c-sdkutils==0.1.15-hce8ee76_3, aws-checksums==0.1.18-hce8ee76_3, aws-crt-cpp==0.26.8-h2150271_2, aws-sdk-cpp==1.11.267-hddb5a97_7, azure-core-cpp==1.11.1-h91d86a7_1, azure-identity-cpp==1.6.0-hf1915f5_1, azure-storage-blobs-cpp==12.10.0-h00ab1b0_1, azure-storage-common-cpp==12.5.0-h94269e2_4, blosc==1.21.5-hc2324a3_1, boto3==1.34.97-pyhd8ed1ab_0, botocore==1.34.97-pyge310_1234567_0, branca==0.7.2-pyhd8ed1ab_0, brotli==1.1.0-hd590300_1, brotli-bin==1.1.0-hd590300_1, brotli-python==1.1.0-py311hb755f60_1, bzip2==1.0.8-hd590300_5, c-ares==1.28.1-hd590300_0, ca-certificates==2024.2.2-hbcca054_0, cairo==1.18.0-h3faef2a_0, certifi==2024.2.2-pyhd8ed1ab_0, cffi==1.16.0-py311hb3a22ac_0, cfitsio==4.4.0-hbdc6101_1, charset-normalizer==3.3.2-pyhd8ed1ab_0, click==8.1.7-unix_pyh707e725_0, click-plugins==1.1.1-py_0, cligj==0.7.2-pyhd8ed1ab_1, contourpy==1.2.1-py311h9547e67_0, cycler==0.12.1-pyhd8ed1ab_0, expat==2.6.2-h59595ed_0, fastavro==1.9.4-py311h459d7ec_0, fiona==1.9.6-py311hf8e0aa6_0, fmt==10.2.1-h00ab1b0_0, folium==0.16.0-pyhd8ed1ab_0, font-ttf-dejavu-sans-mono==2.37-hab24e00_0, font-ttf-inconsolata==3.000-h77eed37_0, font-ttf-source-code-pro==2.038-h77eed37_0, font-ttf-ubuntu==0.83-h77eed37_2, fontconfig==2.14.2-h14ed4e7_0, fonts-conda-ecosystem==1-0, fonts-conda-forge==1-0, fonttools==4.51.0-py311h459d7ec_0, freetype==2.12.1-h267a509_2, freexl==2.0.0-h743c826_0, fsspec==2024.3.1-pyhca7485f_0, gdal==3.8.5-py311hd032c08_2, geopandas==0.14.4-pyhd8ed1ab_0, geopandas-base==0.14.4-pyha770c72_0, geos==3.12.1-h59595ed_0, geotiff==1.7.1-h6cf1f90_16, gflags==2.2.2-he1b5a44_1004, giflib==5.2.2-hd590300_0, glog==0.7.0-hed5481d_0, hdf4==4.2.15-h2a13503_7, hdf5==1.14.3-nompi_h4f84152_101, icu==73.2-h59595ed_0, idna==3.7-pyhd8ed1ab_0, jinja2==3.1.3-pyhd8ed1ab_0, jmespath==1.0.1-pyhd8ed1ab_0, joblib==1.4.2-pyhd8ed1ab_0, json-c==0.17-h7ab15ed_0, kealib==1.5.3-h2f55d51_0, keyutils==1.6.1-h166bdaf_0, kiwisolver==1.4.5-py311h9547e67_1, krb5==1.21.2-h659d440_0, lcms2==2.16-hb7c19ff_0, ld_impl_linux-64==2.40-h55db66e_0, lerc==4.0.0-h27087fc_0, libabseil==20240116.2-cxx17_h59595ed_0, libaec==1.1.3-h59595ed_0, libarchive==3.7.2-h2aa1ff5_1, libarrow==15.0.2-hefa796f_6_cpu, libarrow-acero==15.0.2-hbabe93e_6_cpu, libarrow-dataset==15.0.2-hbabe93e_6_cpu, libarrow-flight==15.0.2-hc4f8a93_6_cpu, libarrow-flight-sql==15.0.2-he4f5ca8_6_cpu, libarrow-gandiva==15.0.2-hc1954e9_6_cpu, libarrow-substrait==15.0.2-he4f5ca8_6_cpu, libblas==3.9.0-22_linux64_openblas, libboost-headers==1.84.0-ha770c72_2, libbrotlicommon==1.1.0-hd590300_1, libbrotlidec==1.1.0-hd590300_1, libbrotlienc==1.1.0-hd590300_1, libcblas==3.9.0-22_linux64_openblas, libcrc32c==1.1.2-h9c3ff4c_0, libcurl==8.7.1-hca28451_0, libdeflate==1.20-hd590300_0, libedit==3.1.20191231-he28a2e2_2, libev==4.33-hd590300_2, libevent==2.1.12-hf998b51_1, libexpat==2.6.2-h59595ed_0, libffi==3.4.2-h7f98852_5, libgcc-ng==13.2.0-h77fa898_6, libgdal==3.8.5-hf9625ee_2, libgfortran-ng==13.2.0-h69a702a_6, libgfortran5==13.2.0-h43f5ff8_6, libglib==2.80.0-hf2295e7_6, libgomp==13.2.0-h77fa898_6, libgoogle-cloud==2.23.0-h9be4e54_1, libgoogle-cloud-storage==2.23.0-hc7a4891_1, libgrpc==1.62.2-h15f2491_0, libiconv==1.17-hd590300_2, libjpeg-turbo==3.0.0-hd590300_1, libkml==1.3.0-h01aab08_1018, liblapack==3.9.0-22_linux64_openblas, libllvm16==16.0.6-hb3ce162_3, libnetcdf==4.9.2-nompi_h9612171_113, libnghttp2==1.58.0-h47da74e_1, libnl==3.9.0-hd590300_0, libnsl==2.0.1-hd590300_0, libopenblas==0.3.27-pthreads_h413a1c8_0, libparquet==15.0.2-hacf5a1f_6_cpu, libpng==1.6.43-h2797004_0, libpq==16.2-h33b98f1_1, libprotobuf==4.25.3-h08a7969_0, libre2-11==2023.09.01-h5a48ba9_2, librttopo==1.1.0-h8917695_15, libspatialindex==1.9.3-h9c3ff4c_4, libspatialite==5.1.0-h6f065fc_5, libsqlite==3.45.3-h2797004_0, libssh2==1.11.0-h0841786_0, libstdcxx-ng==13.2.0-hc0a3c3a_6, libthrift==0.19.0-hb90f79a_1, libtiff==4.6.0-h1dd3fc0_3, libutf8proc==2.8.0-h166bdaf_0, libuuid==2.38.1-h0b41bf4_0, libwebp-base==1.4.0-hd590300_0, libxcb==1.15-h0b41bf4_0, libxml2==2.12.6-h232c23b_2, libzip==1.10.1-h2629f0a_3, libzlib==1.2.13-hd590300_5, lz4-c==1.9.4-hcb278e6_0, lzo==2.10-hd590300_1001, mapclassify==2.6.1-pyhd8ed1ab_0, markupsafe==2.1.5-py311h459d7ec_0, matplotlib-base==3.8.4-py311h54ef318_0, minizip==4.0.5-h0ab5242_0, munkres==1.1.4-pyh9f0ad1d_0, ncurses==6.4.20240210-h59595ed_0, networkx==3.3-pyhd8ed1ab_1, nspr==4.35-h27087fc_0, nss==3.98-h1d7d5a4_0, numpy==1.26.4-py311h64a7726_0, openjpeg==2.5.2-h488ebb8_0, openssl==3.3.0-hd590300_0, orc==2.0.0-h17fec99_1, packaging==24.0-pyhd8ed1ab_0, pandas==2.2.2-py311h320fe9a_0, pcre2==10.43-hcad00b1_0, pillow==10.3.0-py311h18e6fac_0, pip==24.0-pyhd8ed1ab_0, pixman==0.43.2-h59595ed_0, poppler==24.04.0-hb6cd0d7_0, poppler-data==0.4.12-hd8ed1ab_0, postgresql==16.2-h82ecc9d_1, proj==9.4.0-h1d62c97_1, pthread-stubs==0.4-h36c2ea0_1001, pyarrow==15.0.2-py311hd5e4297_6_cpu, pycparser==2.22-pyhd8ed1ab_0, pyparsing==3.1.2-pyhd8ed1ab_0, pyproj==3.6.1-py311hb3a3e68_6, pysocks==1.7.1-pyha2e5f31_6, python==3.11.0-he550d4f_1_cpython, python-dateutil==2.9.0-pyhd8ed1ab_0, python-tzdata==2024.1-pyhd8ed1ab_0, python_abi==3.11-4_cp311, pytz==2024.1-pyhd8ed1ab_0, rdma-core==51.0-hd3aeb46_0, re2==2023.09.01-h7f4b329_2, readline==8.2-h8228510_1, requests==2.31.0-pyhd8ed1ab_0, rtree==1.2.0-py311h3bb2b0f_0, s2n==1.4.12-h06160fa_0, s3fs==0.4.2-py_0, s3transfer==0.10.1-pyhd8ed1ab_0, scikit-learn==1.4.2-py311hc009520_0, scipy==1.13.0-py311h64a7726_0, setuptools==69.5.1-pyhd8ed1ab_0, shapely==2.0.4-py311h2032efe_0, six==1.16.0-pyh6c4a22f_0, snappy==1.2.0-hdb0a2a9_1, spdlog==1.13.0-hd2e6256_0, sqlite==3.45.3-h2c6b66d_0, threadpoolctl==3.5.0-pyhc1e730c_0, tiledb==2.22.0-h27f064a_3, tk==8.6.13-noxft_h4845f30_101, tzcode==2024a-h3f72095_0, tzdata==2024a-h0c530f3_0, ucx==1.15.0-ha691c75_8, uriparser==0.9.7-h59595ed_1, urllib3==2.2.1-pyhd8ed1ab_0, wheel==0.43.0-pyhd8ed1ab_1, xerces-c==3.2.5-hac6953d_0, xorg-kbproto==1.0.7-h7f98852_1002, xorg-libice==1.1.1-hd590300_0, xorg-libsm==1.2.4-h7391055_0, xorg-libx11==1.8.9-h8ee46fc_0, xorg-libxau==1.0.11-hd590300_0, xorg-libxdmcp==1.1.3-h7f98852_0, xorg-libxext==1.3.4-h0b41bf4_2, xorg-libxrender==0.9.11-hd590300_0, xorg-renderproto==0.11.1-h7f98852_1002, xorg-xextproto==7.3.0-h0b41bf4_1003, xorg-xproto==7.0.31-h7f98852_1007, xyzservices==2024.4.0-pyhd8ed1ab_0, xz==5.2.6-h166bdaf_0, zlib==1.2.13-hd590300_5, zstd==1.5.6-ha6fb4c9_0
(you might get some small differences β€” we inject a few more packages by default at Netflix). You can try that one if that unblocks you.
note, you should probably just resolve with your top level dependencies (for both mainline and the extension). You don’t need to pre-resolve and pass it the dependencies after that
you can pass it the top ones (in your yaml file) and it should reoslve properly.
q
I'll try both suggestions.
I think we were trying to avoid having 5 packages defined and pinned, and when resolving one of the dependencies gets bumped and break the app.
d
you mean one of the transitive dependenices?
q
Not sure how to call this, but for example
"botocore"
needed by s3fs when my env is:
Copy code
name: env
channels:
  - conda-forge
  - nodefaults
dependencies:
  - geopandas
  - pandas
  - python=3.11
  - pyarrow
  - numpy
  - s3fs
d
ok, yes, that makes sense. So with the mainline conda/pypi, as long as you are on the same machine (well mostly), it will keep your environment locked (ie: not resolve and change botocore for example if it gets updated). For the extension one, same behavior but you also have something called named environment where you can resolve your enviornment once and give it a name and then re-use it. Something like:
Copy code
metaflow environment resolve --arch=linux-64 -f myenv.yml --alias philippe/awesome_env
and then instead of
@conda
, use
@named_env(name="philippe/awesome_env")
. You can add tags too like
--alias philippe/awesome_env:v1
and refer to that specifically. Tags are immutable except for
latest
(the default tag) so you can update your env (it’s kind of like docker tags).
as a side note, you should probably specify your python version as β€œ3.11.*” since it will otherwise match 3.11.0 only
πŸ‘ 1
q
True, I think we are actually using this already. Once it is bootstrapped, it reuses the environment for the future runs of the flow.
d
that yes β€” both versions do this. If it is deployed to argo/airflow, the enviornment is locked. If it is not deployed, it will look up if it has a cached environment locally (same machine) and use that if it can. Else it will re-resolve.
named_env allows more control of when it reresolves and removes the necessity to be on the same machine (among other things)
q
Not sure if the named env would work in our use case. The idea is to be able to launch flow from my laptop (in that step I guess the
@named_env(name="philippe/awesome_env")
tag would work once I resolved it. But once debug, it is connected to argo and would trigger on a event/schedule.
d
you can resolve same name with different arch if that is what you want to do
it would use the appropriate arch as needed (arm64 on your m1 and linux-64 on your remote node)
q
ok so those envs are saved somewhere that would be accessible from the cluster nodes?
d
yes.
πŸ™Œ 1
(provided you have the same datastore configuration on both which should be the case already)
g
Hi team - I am running into the following error:
Copy code
Bootstrapping virtual environment(s) ...
    Micromamba ran into an error while setting up environment:
    command '/root/.metaflowconfig/micromamba/bin/micromamba create --yes --quiet --dry-run --no-extra-safety-checks --repodata-ttl=86400 --retry-clean-cache --prefix=/tmp/tmpqisl16cr/prefix --channel=conda-forge requests==>=2.21.0 boto3==>=1.14.0 pandas==2.0.0 snowflake-connector-python==3.0.4 pyyaml==6.0.1 slack-sdk==3.23.0 python==3.9.18' returned error (1)
    critical libmamba Error parsing version ">=2.21.0". Version contains invalid characters in >=2.21.0.
Any suggested solutions?
d
which version of metalfow and micromamba?