# \[issue\] platform not defined

**URL:** <https://cylc.discourse.group/t/issue-platform-not-defined/1285>\
**Category:** Cylc Support\
**Created:** [January 30, 2026, 2:31am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285 "2026-01-30T02:31:37Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jerry](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/jerry/32/153_2.png) [@Jerry](https://cylc.discourse.group/u/Jerry)\
**Post date:** [January 30, 2026, 2:31am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/1 "2026-01-30T02:31:37Z")

</div>

Hi,

I’m new to Cylc 8.

Cylc 8.6.2 and rose 2.6.2 were installed to a centralized loation with command “pip3 install --user”

I played examples extracted from the cylc.flow package with installed Cylc/rose environement, they worked fine.

However, my suite keeps throwing a **‘platform not defined’** error. It isn’t even generating the **‘job’** script in the log/job directory — only the **job-activity.log** is available.

I tried to tune the “platform“ setting in the suite and global.cylc, nothing worked for me. Neither the log/scheduler/log gave a hint.

Wondering what went wrong with my suite or the Cylc config.

Here is the suite

```auto
[scheduler]
    UTC mode = True

[scheduling]
    [[graph]]
        R1 = """
              {% for expt in EXPERIMENTS %}
                  fcm_make =>\
                  jules_{{expt}} =>\
                  housekeep
              {% endfor %}
        """

[runtime]
    [[root]]
        script = rose task-run --verbose
        [[[events]]]
            mail events = submission failed, submission timeout, failed, execution timeout
  
[[SPICE]]
        pre-script = """
            module purge
            module load PrgEnv-gnu
            module load python/3.12.1-gcc11
            module load ccrs_common ccrs_fcm
            module load cylc8/8.6.2
            module load cray-netcdf cray-hdf5
            module list 2>&1
            """
       #platform = asp2a-login

    [[fcm_make]]
        inherit = None, SPICE
        execution time limit = PT20M
       #platform = {{ ROSE_ORIG_HOST }}
        [[[environment]]]
            JULES_PATH = {{ JULES_PATH }}
            JULES_REVISION = {{ JULES_REVISION }}
            JULES_PATH_META = {{ JULES_PATH }}/rose-meta/
            ROSE_TASK_N_JOBS = 1

```

Here are the job-activity.log

```auto
[jobs-submit cmd] (platform not defined)
[jobs-submit ret_code] 1
[jobs-submit err] No matching platform "asp2a-login-nea01.head.cm.asp2a.nscc.sg" found
[(('event-mail', 'submission failed'), '1') ret_code] 0

```

Here are appropriate Env. vars.

```auto
CYLC_HOME=/home/project/17001770/app/cylc
CYLC_VERSION=8.6.2
CYLC_HOME_ROOT=/home/project/17001770/app/cylc/8.6.2
CYLC_SITE_CONF_PATH=/home/project/17001770/app/cylc/8.6.2/etc
CYLC_PYTHONPATH=/home/project/17001770/app/cylc/8.6.2/lib/python3.12/site-packages

ROSE_HOME=/home/project/17001770/app/cylc/8.6.2/lib/python3.12/site-packages/metomi/rose

```

Here is the output of cylc config

```auto
[platforms]
    [[asp2a-login]]
        hosts = localhost
        install target = ~/scratch/cylc-run
    [[_local_background_indep_tcp]]
        hosts = localhost
        install target = localhost
    [[_remote_background_indep_tcp]]
        hosts = _remote_background_indep_tcp
    [[_remote_at_indep_tcp]]
        job runner = at
        hosts = _remote_background_indep_tcp
    [[_remote_background_indep_poll]]
        hosts = _remote_background_indep_poll
        communication method = poll
        execution polling intervals = PT1S, PT1S, PT1S, PT1S, PT1S, PT5S
        submission polling intervals = PT3S
    [[_remote_at_indep_poll]]
        job runner = at
        hosts = _remote_background_indep_poll
        communication method = poll
        execution polling intervals = PT1S, PT1S, PT1S, PT1S, PT1S, PT5S
        submission polling intervals = PT3S

```

Here are outputs of log/scheduler/log

```auto
2026-01-30T10:17:21+08:00 DEBUG - Starting
2026-01-30T10:17:21+08:00 DEBUG - Configure curve: *[/home/users/gov/nea/jliu/cylc-run/u-bv305/.service/client_public_keys]
2026-01-30T10:17:21+08:00 INFO - Workflow: u-bv305
2026-01-30T10:17:21+08:00 INFO - LOADING saved workflow parameters
2026-01-30T10:17:21+08:00 INFO - + workflow UUID = 777f81cc-2368-4998-b23a-d2b208a26eb3
2026-01-30T10:17:21+08:00 INFO - + UTC mode = True
2026-01-30T10:17:21+08:00 INFO - + initial point = 1
2026-01-30T10:17:21+08:00 INFO - + cycle point time zone = Z
2026-01-30T10:17:21+08:00 INFO - + run mode = live
2026-01-30T10:17:21+08:00 DEBUG - Reading file /home/users/gov/nea/jliu/cylc-run/u-bv305/flow.cylc
2026-01-30T10:17:22+08:00 DEBUG - Loading site/user config files
2026-01-30T10:17:22+08:00 DEBUG - Reading file /home/project/17001770/app/cylc/8.6.2/etc/flow/global.cylc
2026-01-30T10:17:22+08:00 DEBUG - ran rose in 0.19357s
2026-01-30T10:17:22+08:00 DEBUG - Processing with Jinja2
2026-01-30T10:17:22+08:00 DEBUG - Setting Jinja2 template variables:
    + CYLC_TEMPLATE_VARS={'ROSE_VERSION': '2.6.3', 'ROSE_ORIG_HOST': 'asp2a-login-nscc02.head.cm.asp2a.nscc.sg', 'WALLTIME': 'PT3H', 'OMP_NUM_THREADS': 2, 'MPI_NUM_TASKS': 1, 'JULES_REVISIO
    + CYLC_VERSION=8.6.2
    + CYLC_WORKFLOW_SRC_DIR=/scratch/users/gov/nea/jliu/work/u-bv305
    + DESKTOP_MODE=True
    + EXPERIMENTS=['cntl']
    + JULES_OUT_DIR=/home/users/gov/nea/jliu/scratch/work/jules_out
    + JULES_PATH=/home/users/gov/nea/jliu/scratch/work/jules_vn7.8
    + JULES_REVISION=@vn7.8
    + MPI_NUM_TASKS=1
    + OMP_NUM_THREADS=2
    + ROSE_ORIG_HOST=asp2a-login-nscc02.head.cm.asp2a.nscc.sg
    + ROSE_SUITE_VARIABLES={'ROSE_VERSION': '2.6.3', 'ROSE_ORIG_HOST': 'asp2a-login-nscc02.head.cm.asp2a.nscc.sg', 'WALLTIME': 'PT3H', 'OMP_NUM_THREADS': 2, 'MPI_NUM_TASKS': 1, 'JULES_REVIS
    + ROSE_VERSION=2.6.3
    + WALLTIME=PT3H
2026-01-30T10:17:22+08:00 DEBUG - Processed configuration dumped: /home/users/gov/nea/jliu/cylc-run/u-bv305/log/config/flow-processed.cylc
2026-01-30T10:17:22+08:00 DEBUG - Expanding [runtime] namespace lists and parameters
2026-01-30T10:17:22+08:00 DEBUG - First parent(s) demoted to secondary:
     + SPICE as parent of 'fcm_make'
     + SPICE as parent of 'jules_cntl'
     + SPICE as parent of 'housekeep'
2026-01-30T10:17:22+08:00 DEBUG - Parsing the runtime namespace hierarchy
2026-01-30T02:17:22Z DEBUG - Parsing [special tasks]
2026-01-30T02:17:22Z DEBUG - Parsing the dependency graph
2026-01-30T02:17:22Z DEBUG - Required outputs inferred from the graph:
     • fcm_make:succeeded
     • jules_cntl:succeeded
2026-01-30T02:17:22Z INFO - Scheduler: url=tcp://asp2a-login-nscc02.head.cm.asp2a.nscc.sg:43089 pid=1917817
2026-01-30T02:17:22Z INFO - Workflow publisher: url=tcp://asp2a-login-nscc02.head.cm.asp2a.nscc.sg:43074
2026-01-30T02:17:22Z INFO - Run: (re)start number=7, log rollover=1
2026-01-30T02:17:22Z INFO - Cylc version: 8.6.2
2026-01-30T02:17:22Z INFO - Run mode: live
2026-01-30T02:17:22Z INFO - Initial point: 1
2026-01-30T02:17:22Z INFO - Final point: 1
2026-01-30T02:17:22Z INFO - LOADING task proxies
2026-01-30T02:17:22Z INFO - + 1/fcm_make submit-failed
2026-01-30T02:17:22Z DEBUG - [1/fcm_make/01:submit-failed(runahead)] added to the n=0 window
2026-01-30T02:17:22Z DEBUG - Runahead: base point 1
2026-01-30T02:17:22Z DEBUG - Runahead limit: 1
2026-01-30T02:17:22Z INFO - [1/fcm_make/01:submit-failed(runahead)] => submit-failed
2026-01-30T02:17:22Z INFO - LOADING job data
2026-01-30T02:17:22Z INFO - Flows:
    flow: 1 (original flow from 1) 2026-01-29T06:11:19+00:00
2026-01-30T02:17:22Z DEBUG - Loaded main loop plugin "reset bad hosts":
    * reset_bad_hosts
2026-01-30T02:17:22Z DEBUG - Loaded main loop plugin "health check":
    * health_check
2026-01-30T02:17:22Z DEBUG - jobs-poll for localhost on localhost
2026-01-30T02:17:22Z DEBUG - ['cylc', 'jobs-poll', '--debug', '--', '$HOME/cylc-run/u-bv305/log/job', '1/fcm_make/01']
2026-01-30T02:17:22Z ERROR - Incomplete tasks:
    * 1/fcm_make did not complete the required outputs:
      ⨯ ┆ succeeded
2026-01-30T02:17:22Z CRITICAL - Workflow stalled

```

Thansk for your time

Jerry

---

<div class="post-metadata">

**Author:** ![hilary.j.oliver](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/hilary.j.oliver/32/4_2.png) [@hilary.j.oliver](https://cylc.discourse.group/u/hilary.j.oliver)\
**Post date:** [January 30, 2026, 4:20am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/2 "2026-01-30T04:20:20Z")

</div>

Hi @Jerry

A couple of quick comments to start with:

Your global config shows (`_remote_background_indep_tcp` etc.) you’ve been trying to run the Cylc functional tests, which only Cylc developers should need to do.

Your `flow.cylc` file seems to have all of its `platform` items commented out. Was that the case when you got the reported error - i.e. it’s complaining “platform not found” even though you did not assign to a platform (which should default to a background job on localhost, in that case). And where is all that verbiage in the long messy-looking hostname coming from?

Your custom platform definition (`asp2a-login`) looks wrong - `install target` should be a host name, not a disk path (for a multi-host platform, it tells Cylc which host to use for file installation).

I’d suggest getting your job platforms config and job submission working first with a small hello-world workflow, to avoid all the messiness that can be associated with real task environments etc.

---

<div class="post-metadata">

**Author:** ![Jerry](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/jerry/32/153_2.png) [@Jerry](https://cylc.discourse.group/u/Jerry)\
**Post date:** [January 30, 2026, 7:52am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/3 "2026-01-30T07:52:13Z")

</div>

Hi @hilary.j.oliver ,

Thanks for the quick response.

Follow with your sugestions, played this simple flow.cylc, it worked fine

> [meta]  
> title = Hello World  
> description = “”"  
> A simple workflow which runs a single task (hello\_world) once.  
> “”"
> 
> [scheduling]  
> [[graph]]  
> R1 = hello\_world
> 
> [runtime]
> 
> [[hello\_world]]
> 
> platform = asp2a-login  
> script = echo “Hello World!”

Here is the log/job/1/hello\_world/job.out

```auto
Workflow : hello_world
Job : 1/hello_world/01 (try 1)
User@Host: jliu@asp2a-login-nscc02

Hello World!
2026-01-30T13:22:24+08:00 INFO - started
2026-01-30T13:22:26+08:00 INFO - succeeded

```

Here is the global.cylc

```auto
[platforms]
    [[asp2a-login]]
        hosts = localhost
        install target = localhost

```

By comparing with the simple hello\_world workflow, noticed the **‘platform not defined’** might be triggered by the “opt/rose-suite-cylc-install.conf.

```auto
# This file records CLI Options.
# Installed with:
# * Cylc Rose: 1.7.0
# * Rose : 2.6.3
# * Cylc : 8.6.2

!opts=

[env]
# ROSE_ORIG_HOST set by cylc install.
ROSE_ORIG_HOST=asp2a-login-nscc02.head.cm.asp2a.nscc.sg

[template variables]
# ROSE_ORIG_HOST set by cylc install.
ROSE_ORIG_HOST=asp2a-login-nscc02.head.cm.asp2a.nscc.sg

```

Once removed the opt directory, the **‘platform not defined’** was gone, and the log/job/1/fcm\_make/NN/job script also got generated as well.

But it came with another issue “No such command: rose task-run”.

I could make sure the bin directory of rose is avaiable in the $PATH. But the rose --help showed only two commands “rose mpi-launch” and “rose tutorial” are avaiable.

Wondering

1. if something wrong with rose configuration, as I used the legacy rose.conf with rose 2.6.2.
2. If it still needs to use legacy rose 2019.x with Cylc 8, as the “rose task-run“ is not avaiable with rose 2.6.2

Here is rose.conf

```auto
# Common site configuration.
meta-path=/home/project/17001770/UMDIR/rose-meta
rose-doc=http://metomi.github.io/rose/doc/

# Configuration of external commands.e
[external]
editor=vi

## LDAP settings are only relevant if "[rosa-svn]user-tool=ldap".
[rosa-ldap]

# Configuration for "rosa svn-pre-commit" and "rosa svn-post-commit".
[rosa-svn]

# Configuration related to the built-in "rose_ana" application.
[rose-ana]

# Configuration for Rose Bush server. (Examples are default values.)
[rose-bush]

# Configuration specific to "rose config-edit".
[rose-config-edit]
accel-find-next=F3

# Calling "rose" on a remote host.
[rose-home-at]

# Configuration related to "rose host-select".
[rose-host-select]
group{athena}=10.103.72.110 10.103.72.111 10.117.5.104 172.23.129.5 172.23.129.10
group{helios}=10.103.72.110 10.103.72.111 10.117.5.104 172.23.129.5 172.23.129.10
group{hpc}=10.103.72.110 10.103.72.111 10.117.5.104 172.23.129.5 172.23.129.10
#default=linux
group{linux}=10.103.72.110 10.103.72.111 10.117.5.104 172.23.129.5 172.23.129.10

# Configuration related to "rose mpi-launch".
[rose-mpi-launch]
launcher-list=aprun

# Configuration related to "rose stem".
[rose-stem]
automatic-options=SITE=mss

# Configuration related to "rose suite-hook"
[rose-suite-hook]

# Configuration related to "rose suite-log"
#
## Mapping $HOME/cylc-run/SUITE to a http:// URL.
## E.g. If $HOME/public_html/cylc-run is a symlink of $HOME/cylc-run
## and $HOME/public_html/ is served as http://host/~$USER/:
# home-public-html=http://host/~$USER public_html
## URL to the site's Rose Bush web service.
# rose-bush=http://host/rose-bush/
[rose-suite-log]

# Configuration related to "rose suite-run".
[rose-suite-run]
#default=helios
root-dir=*=$DATADIR

# Configuration related to "rose task-run".
[rose-task-run]

# Configuration related to the database of the Rosie web service server
[rosie-db]
db.mss=sqlite:///home/project/17001770/rosie_repos/mss-db.sqlite
repos.mss=/scratch/singadm/rosie_repos

# Configuration related to "rosie go" GUI
[rosie-go]

# Configuration related to Rosie client commands
[rosie-id]
prefix-default=mss
prefix-location.mss=file:///home/project/17001770//rosie_repos
prefix-web.mss=http://127.0.0.1/trac/mss/intertrac/source:
prefix-ws.mss=http://127.0.0.1:8080/mss
prefixes-ws-default=mss

# Configuration related to the Rosie version control client
[rosie-vc]

# Configuration related to the adhoc Rosie web service server
[rosie-ws]
log-dir=/home/project/17001770/rosie_repos/log
port=8080

# Configuration related to Rosie web service clients
[rosie-ws-client-requests]

# Test Battery Configuration
[t]

```

Thanks for your time

---

<div class="post-metadata">

**Author:** ![wxtim](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/wxtim/32/151_2.png) [@wxtim](https://cylc.discourse.group/u/wxtim)\
**Post date:** [January 30, 2026, 10:02am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/4 "2026-01-30T10:02:54Z")

</div>

Hi Jerry,

There’s quite a lot to unpick here…

### Platform setting commented:

In your original workflow you had

```cylc
       #platform = {{ ROSE_ORIG_HOST }}

```

But I’m going to assume that it was in fact uncommented, else platform is assumed to be localhost - the host on which the workflow is running, and you should not have had a platform error.

### Platform name

You’ve demonstrated that `platform = asp2a-login` works with your mini workflow. However the real workflow uses `platform = {{ ROSE_ORIG_HOST }}`. The `rose-suite-cylc-install.conf` records what options were used on the command line `cylc install` or `cylc vip`. **Do not delete or modify this file** - it’s a way of recording what `cylc install` has done.

In this case the only thing recorded in `rose-suite-cylc-install.conf` is the standard variable `ROSE_ORIG_HOST`, the hostname of your machine. But it doesn’t match the platform spec. The answer here is to change the platform spec to:

```ini
[platforms]
    [[asp2a-login.*]]
        hosts = localhost
        install target = localhost

```

Platforms names in the global config are regular expressions and Cylc will attempt to match them starting from the bottom of the list.

### No `rose task-run`

The response to your questions is no. You **should** use Rose 2.6.x. You **should not** use Cylc 8 with Rose 2019. I don’t think your config should be a problem.

> “No such command: rose task-run”

Something isn’t right with your installation of rose. You should be using rose 2.6.2. I don’t think that there is a problem with your config.

**Did you install rose, or is this a site installation?**

I’m guessing from you writing your own config files that you are likely installing Cylc and Rose for yourself. In which case are you using Pip or Conda?

---

<div class="post-metadata">

**Author:** ![Jerry](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/jerry/32/153_2.png) [@Jerry](https://cylc.discourse.group/u/Jerry)\
**Post date:** [January 30, 2026, 2:13pm UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/5 "2026-01-30T14:13:51Z")

</div>

Hi wxtim,

Thanks for your inputs.

I tryied these two ways

1. From source code

```auto
1) Download rose-2.6.2.tar.gz from https://github.com/metomi/rose/archive/refs/tags/2.6.2.tar.gz

2) export PYTHONUSERBASE=/home/project/17001770/app/cylc/8.6.2

3) tar -zxvf rose-2.6.2.tar.gz ; cd rose-2.6.2

4) pip3 install --user .

```

1. with pip

```auto
pip3 install --user metomi-rose==2.6.2

```

rose was installed in $PYTHONUSEBASE/bin

metomi /{rose,rosie,isodatetime} were installed in $PYTHONUSEBASE/lib/python3.12/site-packages

pip3 list showed metomi-rose & metomi-isodatetime version info.

rose --help showed only “rose mpi-launch” and “rose tutorial” avaiable.

and it’s not able to run “rose check-software”, threw out “No such command: rose check-software”

After diving into the rose installation directory, noticed these codes in rose/rose.py

```auto
BASH_SUB_CMDS = {
    # bash sub commands - hardcoded
    # NOTE: script must exist in the bin/ directory as `{ns}-{sub_cmd}`.
    # (ns, sub_cmd)
    ('rosa', 'db-create'),
    ('rosa', 'svn-post-commit'),
    ('rosa', 'svn-pre-commit'),
    ('rosa', 'ws'),
    ('rose', 'mpi-launch'),
    ('rose', 'tutorial'),
}

PYTHON_SUB_CMDS = {
    # python sub commands - extracted from entry points
    # (ns, sub_cmd): entry_point
    **{
        ('rose', entry_point.name): entry_point
        for entry_point in iter_entry_points('rose.commands')
    },
    **{
        ('rosie', entry_point.name): entry_point
        for entry_point in iter_entry_points('rosie.commands')
    }
}

```

task\_run.py & check\_software.py are avaiable in metomi/rose.

However, `PYTHON_SUB_CMDS` returned an empty string.

It appeared that ‘rose task-run’ was picked up from **neither** BASH\_SUB\_CMDS **nor** PYTHON\_SUB\_CMDS.

And grep showed task\_run.py was not called any where.

And also notice all sub cmds in the ‘t’ directory were not installed. Tried copy the sub cmds direcotory ‘t’ to lib/python3.12/site-packages/metomi/rose and $PYTHONUSERBASE, neither worked, still not able to pick up the sub cmd task-run.

I am wondering what went wrong with my installation and if there is a **manual fix available**."

Thanks for your time.

Regards

---

<div class="post-metadata">

**Author:** ![oliver.sanders](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/oliver.sanders/32/110_2.png) [@oliver.sanders](https://cylc.discourse.group/u/oliver.sanders)\
**Post date:** [January 30, 2026, 3:47pm UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/6 "2026-01-30T15:47:37Z")

</div>

> [@Jerry](#):
>
> It appeared that ‘rose task-run’ was picked up from **neither** BASH\_SUB\_CMDS **nor** PYTHON\_SUB\_CMDS.

That means Rose wasn’t installed correctly.

I’m not sure what `python` and `pip3` are in your environment or how `--user` installs are working but it will be something between these three which is causing the issues.

I would suggest starting by uninstalling Cylc and Rose including any `--user` installations which may have been created in `~/.local/lib/python*/site-packages`. You may find you need to uninstall Cylc/Rose multiple times as you may have duplicate installations in different locations (`--user` installs can do this). Note you can run `cylc version --long` and `rose version --long` to locate the installation. Once this is done, you might want to try running `pip check` to make sure the user environment is functional.

Then try installing them again from pypi (or conda-forge), ideally without the `--user` if possible (note user installs can be flaky and may conflict with other tools or environments), virtual environments are easier/safer.

We recommend installing via Conda (which provides its own virtual environments) or if that’s not an option, using Python virtual environments. We provide a Cylc wrapper script which takes care of activating the environment for you and allows multiple parallel installations of Cylc at different versions (makes upgrading easier) - [Installation — Cylc 8.6.2 documentation](https://cylc.github.io/cylc-doc/stable/html/installation.html#managing-environments)

---

<div class="post-metadata">

**Author:** ![Jerry](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/jerry/32/153_2.png) [@Jerry](https://cylc.discourse.group/u/Jerry)\
**Post date:** [February 2, 2026, 5:31am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/7 "2026-02-02T05:31:46Z")

</div>

Hi all,

Thanks for your inputs.

Managed to figure out what went wrong.

For customized (non-Conda) installations, it must set the **ROSE\_PYTHONPATH** environment variable to the ROSE installation directory. This is because `rose.py` clears existing `PYTHONPATH` items from `sys.path` to prevent environment contamination; **ROSE\_PYTHONPATH** is then used to safely re-add the necessary ROSE directories.

All issues I had previously were due to missing of ROSE\_PYTHONPATH.

If I’m not wrong, info. about ROSE\_PYTHONPATH is missing from the user guid.

---

<div class="post-metadata">

**Author:** ![wxtim](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/wxtim/32/151_2.png) [@wxtim](https://cylc.discourse.group/u/wxtim)\
**Post date:** [February 2, 2026, 8:36am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/8 "2026-02-02T08:36:15Z")

</div>

`ROSE_PYTHONPATH` exists to allow you to add things to `PYTHONPATH` inside Rose. But you enviornment should be set up such that adding Rose itself to `ROSE_PYTHONPATH` is unecessary. Oliver’s advice is still worth following through.

---

<div class="post-metadata">

**Author:** ![oliver.sanders](https://yyz2.discourse-cdn.com/free1/user_avatar/cylc.discourse.group/oliver.sanders/32/110_2.png) [@oliver.sanders](https://cylc.discourse.group/u/oliver.sanders)\
**Post date:** [February 2, 2026, 9:28am UTC](https://cylc.discourse.group/t/issue-platform-not-defined/1285/9 "2026-02-02T09:28:58Z")

</div>

Hi,

Yes, we clear the `PYTHONPATH` argument as this often causes conflicts between the Cylc/Rose environment and the job environment ([context](https://cylc.discourse.group/t/rose-pythonpath/862)).

If you need to add a module into the Cylc/Rose environment’s Python path (and not the job environment’s Python path), use the [`CYLC_PYTHONPATH`](https://cylc.github.io/cylc-doc/stable/html/reference/changes.html#cylc-ignores-pythonpath) and `ROSE_PYTHONPATH` variables.

However, this isn’t necessary for normal installations, it’s only required if things have been installed into non-standard locations so `PYTHONPATH` is needed to locate them.
