conda / menuinst

Cross platform menu item installation
https://conda.github.io/menuinst/
BSD 3-Clause "New" or "Revised" License
33 stars 41 forks source link

Cannot set Spyder as default application for `.py` files on Linux #226

Open mrclary opened 3 days ago

mrclary commented 3 days ago

Checklist

What happened?

Using menuinst on Ubuntu, I am unable to set python files to open with Spyder. Right click on a Python file, click "Open With Other Application". Spyder is not available in the application list.

Screenshot 2024-07-01 at 11 27 24 AM

Conda Info

mamba version : 1.5.8
     active environment : base
    active env location : /home/rclary/miniforge3
            shell level : 1
       user config file : /home/rclary/.condarc
 populated config files : /home/rclary/miniforge3/.condarc
                          /home/rclary/.condarc
          conda version : 24.5.0
    conda-build version : not installed
         python version : 3.10.12.final.0
                 solver : libmamba (default)
       virtual packages : __archspec=1=skylake
                          __conda=24.5.0=0
                          __glibc=2.39=0
                          __linux=6.8.0=0
                          __unix=0=0
       base environment : /home/rclary/miniforge3  (writable)
      conda av data dir : /home/rclary/miniforge3/etc/conda
  conda av metadata url : None
           channel URLs : file:///home/rclary/.conda/conda-bld/linux-64
                          file:///home/rclary/.conda/conda-bld/noarch
                          https://conda.anaconda.org/conda-forge/label/spyder_dev/linux-64
                          https://conda.anaconda.org/conda-forge/label/spyder_dev/noarch
                          https://conda.anaconda.org/conda-forge/label/spyder_kernels_rc/linux-64
                          https://conda.anaconda.org/conda-forge/label/spyder_kernels_rc/noarch
                          https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
          package cache : /home/rclary/miniforge3/pkgs
                          /home/rclary/.conda/pkgs
       envs directories : /home/rclary/.conda/envs
                          /home/rclary/miniforge3/envs
               platform : linux-64
             user-agent : conda/24.5.0 requests/2.31.0 CPython/3.10.12 Linux/6.8.0-36-generic ubuntu/24.04 glibc/2.39 solver/libmamba conda-libmamba-solver/23.12.0 libmambapy/1.5.8
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False

Conda Config

==> /home/rclary/miniforge3/.condarc <==
channels:
  - conda-forge

==> /home/rclary/.condarc <==
auto_activate_base: False
envs_dirs:
  - ~/.conda/envs
channel_priority: flexible
channels:
  - /home/rclary/.conda/conda-bld
  - conda-forge/label/spyder_dev
  - conda-forge/label/spyder_kernels_rc
  - conda-forge
  - defaults
show_channel_urls: True
bld_path: /home/rclary/.conda/conda-bld
conda-build:
  root-dir: ~/.conda/conda-bld
  pkg_format: 2
  zstd_compression_level: 19

Conda list

# packages in environment at /home/rclary/miniforge3:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
archspec                  0.2.3              pyhd8ed1ab_0    conda-forge
boltons                   23.0.0             pyhd8ed1ab_0    conda-forge
brotli-python             1.1.0           py310hc6cd4ac_0    conda-forge
bzip2                     1.0.8                h7f98852_4    conda-forge
c-ares                    1.24.0               hd590300_0    conda-forge
ca-certificates           2024.6.2             hbcca054_0    conda-forge
certifi                   2024.6.2           pyhd8ed1ab_0    conda-forge
cffi                      1.15.1          py310h255011f_3    conda-forge
charset-normalizer        3.2.0              pyhd8ed1ab_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_0    conda-forge
conda                     24.5.0          py310hff52083_0    conda-forge
conda-libmamba-solver     23.12.0            pyhd8ed1ab_0    conda-forge
conda-package-handling    2.2.0              pyh38be061_0    conda-forge
conda-package-streaming   0.9.0              pyhd8ed1ab_0    conda-forge
cryptography              41.0.3          py310h75e40e8_0    conda-forge
distro                    1.9.0              pyhd8ed1ab_0    conda-forge
fmt                       10.2.1               h00ab1b0_0    conda-forge
frozendict                2.4.4           py310hc51659f_0    conda-forge
icu                       73.2                 h59595ed_0    conda-forge
idna                      3.4                pyhd8ed1ab_0    conda-forge
jsonpatch                 1.32               pyhd8ed1ab_0    conda-forge
jsonpointer               2.0                        py_0    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
krb5                      1.21.2               h659d440_0    conda-forge
ld_impl_linux-64          2.40                 h41732ed_0    conda-forge
libarchive                3.7.2                h2aa1ff5_1    conda-forge
libcurl                   8.7.1                hca28451_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 h516909a_1    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libgcc-ng                 13.1.0               he5830b7_0    conda-forge
libgomp                   13.1.0               he5830b7_0    conda-forge
libiconv                  1.17                 h166bdaf_0    conda-forge
libmamba                  1.5.8                had39da4_0    conda-forge
libmambapy                1.5.8           py310h39ff949_0    conda-forge
libnghttp2                1.58.0               h47da74e_1    conda-forge
libnsl                    2.0.0                h7f98852_0    conda-forge
libsolv                   0.7.24               hfc55251_3    conda-forge
libsqlite                 3.43.0               h2797004_0    conda-forge
libssh2                   1.11.0               h0841786_0    conda-forge
libstdcxx-ng              13.1.0               hfd8a6a1_0    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libxml2                   2.12.3               h232c23b_0    conda-forge
libzlib                   1.2.13               hd590300_5    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
lzo                       2.10              h516909a_1000    conda-forge
mamba                     1.5.8           py310h51d5547_0    conda-forge
menuinst                  2.0.1           py310hff52083_0    conda-forge
ncurses                   6.4                  hcb278e6_0    conda-forge
openssl                   3.3.1                h4ab18f5_1    conda-forge
packaging                 23.1               pyhd8ed1ab_0    conda-forge
pip                       23.2.1             pyhd8ed1ab_0    conda-forge
platformdirs              4.1.0              pyhd8ed1ab_0    conda-forge
pluggy                    1.3.0              pyhd8ed1ab_0    conda-forge
pybind11-abi              4                    hd8ed1ab_3    conda-forge
pycosat                   0.6.4           py310h5764c6d_1    conda-forge
pycparser                 2.21               pyhd8ed1ab_0    conda-forge
pyopenssl                 23.2.0             pyhd8ed1ab_1    conda-forge
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
python                    3.10.12         hd12c33a_0_cpython    conda-forge
python_abi                3.10                    3_cp310    conda-forge
readline                  8.2                  h8228510_1    conda-forge
reproc                    14.2.4               h0b41bf4_0    conda-forge
reproc-cpp                14.2.4               hcb278e6_0    conda-forge
requests                  2.31.0             pyhd8ed1ab_0    conda-forge
ruamel.yaml               0.17.32         py310h2372a71_0    conda-forge
ruamel.yaml.clib          0.2.7           py310h1fa729e_1    conda-forge
setuptools                68.1.2             pyhd8ed1ab_0    conda-forge
tk                        8.6.12               h27826a3_0    conda-forge
toolz                     0.12.0             pyhd8ed1ab_0    conda-forge
tqdm                      4.66.1             pyhd8ed1ab_0    conda-forge
truststore                0.8.0              pyhd8ed1ab_0    conda-forge
tzdata                    2023c                h71feb2d_0    conda-forge
urllib3                   2.0.4              pyhd8ed1ab_0    conda-forge
wheel                     0.41.2             pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml-cpp                  0.8.0                h59595ed_0    conda-forge
zstandard                 0.19.0          py310h5764c6d_0    conda-forge
zstd                      1.5.5                hfc55251_0    conda-forge

Additional Context

spyder-menu.json ``` { "$schema": "https://json-schema.org/draft-07/schema", "$id": "https://schemas.conda.io/menuinst-1.schema.json", "menu_name": "{{ DISTRIBUTION_NAME }} spyder", "menu_items": [ { "name": { "target_environment_is_base": "Spyder 6 ({{ DISTRIBUTION_NAME }})", "target_environment_is_not_base": "Spyder 6 ({{ ENV_NAME }})" }, "description": "Scientific PYthon Development EnviRonment", "icon": "{{ MENU_DIR }}/spyder.{{ ICON_EXT }}", "activate": false, "terminal": false, "command": [""], "platforms": { "win": { "desktop": true, "app_user_model_id": "spyder.Spyder", "command": ["{{ PREFIX }}/pythonw.exe", "{{ PREFIX }}/Scripts/spyder-script.py", "%*"], "file_extensions": [ ".bat", ".c", ".cc", ".cfg", ".cl", ".cmd", ".cpp", ".css", ".cxx", ".desktop", ".diff", ".enaml", ".f", ".f03", ".f08", ".f2k", ".f77", ".f90", ".f95", ".for", ".h", ".hh", ".hpp", ".htm", ".html", ".hxx", ".inf", ".ini", ".ipy", ".ipynb", ".jl", ".js", ".json", ".m", ".md", ".nsh", ".nsi", ".patch", ".po", ".pot", ".pro", ".properties", ".pxd", ".pxi", ".py", ".pyw", ".pyx", ".reg", ".rej", ".rst", ".scss", ".session", ".txt", ".xml", ".yaml", ".yml" ] }, "linux": { "Categories": [ "Development", "Science" ], "command": ["{{ PREFIX }}/bin/spyder", "$@"], "StartupWMClass": "Spyder", "MimeType": [ "text/x-script.python", "text/plain", "text/html", "text/xml", "text/x-c", "text/x-perl" ] }, "osx": { "precommand": "pushd \"$(dirname \"$0\")\" &>/dev/null", "command": ["./python", "{{ PREFIX }}/bin/spyder", "$@"], "link_in_bundle": { "{{ PREFIX }}/bin/python": "{{ MENU_ITEM_LOCATION }}/Contents/MacOS/python" }, "CFBundleName": "Spyder 6", "CFBundleIdentifier": "org.spyder-ide.Spyder", "CFBundleVersion": "6.0.0b3.dev8", "CFBundleDocumentTypes": [ { "CFBundleTypeName": "text document", "CFBundleTypeRole": "Editor", "LSHandlerRank": "Default", "CFBundleTypeIconFile": "spyder.icns", "LSItemContentTypes": [ "com.apple.applescript.text", "com.apple.ascii-property-list", "com.apple.audio-unit-preset", "com.apple.binary-property-list", "com.apple.configprofile", "com.apple.crashreport", "com.apple.dashcode.css", "com.apple.dashcode.javascript", "com.apple.dashcode.json", "com.apple.dashcode.manifest", "com.apple.dt.document.ascii-property-list", "com.apple.dt.document.script-suite-property-list", "com.apple.dt.document.script-terminology-property-list", "com.apple.property-list", "com.apple.rez-source", "com.apple.scripting-definition", "com.apple.structured-text", "com.apple.traditional-mac-plain-text", "com.apple.xcode.ada-source", "com.apple.xcode.apinotes", "com.apple.xcode.bash-script", "com.apple.xcode.configsettings", "com.apple.xcode.csh-script", "com.apple.xcode.entitlements-property-list", "com.apple.xcode.fortran-source", "com.apple.xcode.glsl-source", "com.apple.xcode.ksh-script", "com.apple.xcode.lex-source", "com.apple.xcode.make-script", "com.apple.xcode.mig-source", "com.apple.xcode.pascal-source", "com.apple.xcode.strings-text", "com.apple.xcode.tcsh-script", "com.apple.xcode.yacc-source", "com.apple.xcode.zsh-script", "com.apple.xml-property-list", "com.netscape.javascript-source", "com.scenarist.closed-caption", "com.sun.java-source", "com.sun.java-web-start", "net.daringfireball.markdown", "org.khronos.glsl-source", "org.oasis-open.xliff", "public.ada-source", "public.assembly-source", "public.bash-script", "public.c-header", "public.c-plus-plus-header", "public.c-plus-plus-source", "public.c-source", "public.case-insensitive-text", "public.comma-separated-values-text", "public.csh-script", "public.css", "public.delimited-values-text", "public.dylan-source", "public.filename-extension", "public.fortran-77-source", "public.fortran-90-source", "public.fortran-95-source", "public.fortran-source", "public.html", "public.json", "public.ksh-script", "public.lex-source", "public.log", "public.m3u-playlist", "public.make-source", "public.mig-source", "public.mime-type", "public.module-map", "public.nasm-assembly-source", "public.objective-c-plus-plus-source", "public.objective-c-source", "public.opencl-source", "public.pascal-source", "public.patch-file", "public.perl-script", "public.php-script", "public.plain-text", "public.python-script", "public.rss", "public.ruby-script", "public.script", "public.shell-script", "public.source-code", "public.tcsh-script", "public.text", "public.utf16-external-plain-text", "public.utf16-plain-text", "public.utf8-plain-text", "public.utf8-tab-separated-values-text", "public.xhtml", "public.xml", "public.yacc-source", "public.yaml", "public.zsh-script" ] } ] } } } ] } ```
python -c "import menuinst; menuinst.api.install('/home/rclary/.conda/envs/spy6b3d8/Menu/spyder-menu.json', base_prefix='/home/rclary/miniforge3', target_prefix='/home/rclary/.conda/envs/spy6b3d8')"
jaimergp commented 8 hours ago

With the following JSON file, I do see this in the "Open with" menu (as expected):

image

The difference in our configs is that the example above does have the glob patterns. But maybe that shouldn't be needed for common mime types? Let me take a look.