Search code examples
anacondacondarelative-pathenvironmentabsolute-path

How to hide or make relative the paths that appear in the files inside the conda-meta folder?


When a build a conda environment like this

conda create --prefix env python=3.6.5

Some absolute paths appear in some json files in the conda-meta folder. How can I avoid it? I just want to use relative paths here or I just want to hide them completely. Is there a way to achieve this? Are they mandatory? See extracted_package_dir, source or package_tarball_full_path attributes:

{
"arch": "x86_64",
"build": "py36_0",
"build_number": 0,
"channel": "https://repo.anaconda.com/pkgs/main/win-64",
"constrains": [],
"depends": [
    "python >=3.6,<3.7.0a0"
],
"extracted_package_dir": "C:\\Users\\UserName\\AppData\\Local\\conda\\conda\\pkgs\\certifi-2019.3.9-py36_0",
"features": "",
"files": [
    "Lib/site-packages/certifi-2019.03.09-py3.6.egg-info",
    "Lib/site-packages/certifi/__init__.py",
    "Lib/site-packages/certifi/__main__.py",
    "Lib/site-packages/certifi/__pycache__/__init__.cpython-36.pyc",
    "Lib/site-packages/certifi/__pycache__/__main__.cpython-36.pyc",
    "Lib/site-packages/certifi/__pycache__/core.cpython-36.pyc",
    "Lib/site-packages/certifi/cacert.pem",
    "Lib/site-packages/certifi/core.py"
],
"fn": "certifi-2019.3.9-py36_0.tar.bz2",
"license": "ISC",
"link": {
    "source": "C:\\Users\\UserName\\AppData\\Local\\conda\\conda\\pkgs\\certifi-2019.3.9-py36_0",
    "type": 1
},
"md5": "e1faa30cf88c0cd141dfe71e70a9597a",
"name": "certifi",
"package_tarball_full_path": "C:\\Users\\UserName\\AppData\\Local\\conda\\conda\\pkgs\\certifi-2019.3.9-py36_0.tar.bz2",
"paths_data": {
    "paths": [

[...]

If I remove the whole folder the environment become useless and I cannot activate it anymore in order to install, update or remove new packages.

I want to do this to encapsulate the environment in one application and I do not want to have my original absolute paths in the computer of the final user.

My Use Case

I am developing an electron app that uses a tornado server (that uses python)

Currently I am using electron-builder to add the environment to the installer and works pretty well, but one drawback is the conda-meta folder I commented above. What I do now is to remove it manually when I want to make an installer.


Solution

  • Finally the best solution I found was to ignore the folder when creating the final installer with electron-builder.

    So I have applied the directive extraResources to add the conda environment except the folder conda-meta. And I have added the filter "!conda-meta${/*}", the meaning is explained here

    Remember that !doNotCopyMe/**/* would match the files in the doNotCopyMe directory, but not the directory itself, so the empty directory would be created. Solution — use macro ${/*}, e.g. !doNotCopyMe${/*}.

    The result in the package.json file:

    "extraResources": [
        {
            "from": "../env",
            "to": "env",
            "filter": [
                "**/*",
                "!*.pyc",
                "!conda-meta${/*}"
            ]
        }
    ],