`run` and `entrypoint` in .replit

Before Python repls were powered by Nix, the following code in the .replit file would make foo.py the entry point when the repl is opened and the Run button would run main.py.

entrypoint = "foo.py"
run = "python3 main.py"

Now that Python programs are all powered by Nix, there is a lot of default code in the .replit file and I’m unable to figure out how to change the entry point and make the Run button run main.py. I changed entrypoint = "main.py" to entrypoint = "foo.py", but that causes the Run button to run foo.py despite having run = "python3 main.py".

# The command that runs the program. If the interpreter field is set, it will have priority and this run command will do nothing
run = "python3 main.py"

# The primary language of the repl. There can be others, though!
language = "python3"
entrypoint = "foo.py" 

# A list of globs that specify which files and directories should
# be hidden in the workspace.
hidden = ["venv", ".config", "**/__pycache__", "**/.mypy_cache", "**/*.pyc", ".upm", "poetry.lock", "pyproject.toml", ".gitignore"]

# Specifies which nix channel to use when building the environment.
[nix]
channel = "stable-22_11"

# The command to start the interpreter.
[interpreter]
  [interpreter.command]
  args = [
    "stderred",
    "--",
    "prybar-python310",
    "-q",
    "--ps1",
    "\u0001\u001b[33m\u0002\u0001\u001b[00m\u0002 ",
    "-i",
  ]
  env = { LD_LIBRARY_PATH = "$PYTHON_LD_LIBRARY_PATH" }

[env]
VIRTUAL_ENV = "/home/runner/${REPL_SLUG}/venv"
PATH = "${VIRTUAL_ENV}/bin"
PYTHONPATH = "$PYTHONHOME/lib/python3.10:${VIRTUAL_ENV}/lib/python3.10/site-packages"
REPLIT_POETRY_PYPI_REPOSITORY = "https://package-proxy.replit.com/pypi/"
MPLBACKEND = "TkAgg"
POETRY_CACHE_DIR = "${HOME}/${REPL_SLUG}/.cache/pypoetry"

# Enable unit tests. This is only supported for a few languages.
[unitTest]
language = "python3"

# Add a debugger!
[debugger]
support = true

  # How to start the debugger.
  [debugger.interactive]
  transport = "localhost:0"
  startCommand = ["dap-python", "main.py"]

    # How to communicate with the debugger.
    [debugger.interactive.integratedAdapter]
    dapTcpAddress = "localhost:0"

    # How to tell the debugger to start a debugging session.
    [debugger.interactive.initializeMessage]
    command = "initialize"
    type = "request"

      [debugger.interactive.initializeMessage.arguments]
      adapterID = "debugpy"
      clientID = "replit"
      clientName = "replit.com"
      columnsStartAt1 = true
      linesStartAt1 = true
      locale = "en-us"
      pathFormat = "path"
      supportsInvalidatedEvent = true
      supportsProgressReporting = true
      supportsRunInTerminalRequest = true
      supportsVariablePaging = true
      supportsVariableType = true

    # How to tell the debugger to start the debuggee application.
    [debugger.interactive.launchMessage]
    command = "attach"
    type = "request"

      [debugger.interactive.launchMessage.arguments]
      logging = {}

# Configures the packager.
[packager]
language = "python3"
ignoredPackages = ["unit_tests"]

  [packager.features]
  enabledForHosting = false
  # Enable searching packages from the sidebar.
  packageSearch = true
  # Enable guessing what packages are needed from the code.
  guessImports = true

# These are the files that need to be preserved when this 
# language template is used as the base language template
# for Python repos imported from GitHub
[gitHubImport]
requiredFiles = [".replit", "replit.nix", ".config", "venv"]

[languages]

[languages.python3]
pattern = "**/*.py"

[languages.python3.languageServer]
start = "pylsp"

[deployment]
run = ["sh", "-c", "python3 main.py"]

Any help would be appreciated. :slight_smile:

1 Like

This is because of the [intrepreter] field, which overrides run. run does not do anything in a Python Repl.

3 Likes

Thanks for the quick response! Is there a way I can modify the .replit file to make the Run button run main.py with a different entry point?

You can change the entrypoint back to main.py.

For context, this is for a project in Teams for Edu where students modify foo.py and don’t touch any of the code in main.py. That’s why I would like the repl to land on foo.py upon startup.

You could remove the whole interpreter section from the .replit file. That will work the way you expect it to.

1 Like

I commented out this part,

[interpreter]
  [interpreter.command]
  args = [
    "stderred",
    "--",
    "prybar-python310",
    "-q",
    "--ps1",
    "\u0001\u001b[33m\u0002\u0001\u001b[00m\u0002 ",
    "-i",
  ]
  env = { LD_LIBRARY_PATH = "$PYTHON_LD_LIBRARY_PATH" }

…but I get this error message:

Run isn’t configured. Try adding a .replit and configuring it https://docs.replit.com/programming-ide/configuring-run-button

There’s still a run and entrypoint at the top of .replit right?

I got it to work! I just needed to also comment out the env section. :slight_smile:

# The command that runs the program. If the interpreter field is set, it will have priority and this run command will do nothing
run = "python3 main.py"

# The primary language of the repl. There can be others, though!
language = "python3"
entrypoint = "foo.py"

# A list of globs that specify which files and directories should
# be hidden in the workspace.
hidden = ["venv", ".config", "**/__pycache__", "**/.mypy_cache", "**/*.pyc", ".upm", "poetry.lock", "pyproject.toml", ".gitignore"]

# Specifies which nix channel to use when building the environment.
[nix]
channel = "stable-22_11"

# The command to start the interpreter.
# [interpreter]
#   [interpreter.command]
#   args = [
#     "stderred",
#     "--",
#     "prybar-python310",
#     "-q",
#     "--ps1",
#     "\u0001\u001b[33m\u0002\u0001\u001b[00m\u0002 ",
#     "-i",
#   ]
#   env = { LD_LIBRARY_PATH = "$PYTHON_LD_LIBRARY_PATH" }
#
# [env]
# VIRTUAL_ENV = "/home/runner/${REPL_SLUG}/venv"
# PATH = "${VIRTUAL_ENV}/bin"
# PYTHONPATH = "$PYTHONHOME/lib/python3.10:${VIRTUAL_ENV}/lib/python3.10/site-packages"
# REPLIT_POETRY_PYPI_REPOSITORY = "https://package-proxy.replit.com/pypi/"
# MPLBACKEND = "TkAgg"
# POETRY_CACHE_DIR = "${HOME}/${REPL_SLUG}/.cache/pypoetry"

# Enable unit tests. This is only supported for a few languages.
[unitTest]
language = "python3"

# Add a debugger!
[debugger]
support = true

  # How to start the debugger.
  [debugger.interactive]
  transport = "localhost:0"
  startCommand = ["dap-python", "main.py"]

    # How to communicate with the debugger.
    [debugger.interactive.integratedAdapter]
    dapTcpAddress = "localhost:0"

    # How to tell the debugger to start a debugging session.
    [debugger.interactive.initializeMessage]
    command = "initialize"
    type = "request"

      [debugger.interactive.initializeMessage.arguments]
      adapterID = "debugpy"
      clientID = "replit"
      clientName = "replit.com"
      columnsStartAt1 = true
      linesStartAt1 = true
      locale = "en-us"
      pathFormat = "path"
      supportsInvalidatedEvent = true
      supportsProgressReporting = true
      supportsRunInTerminalRequest = true
      supportsVariablePaging = true
      supportsVariableType = true

    # How to tell the debugger to start the debuggee application.
    [debugger.interactive.launchMessage]
    command = "attach"
    type = "request"

      [debugger.interactive.launchMessage.arguments]
      logging = {}

# Configures the packager.
[packager]
language = "python3"
ignoredPackages = ["unit_tests"]

  [packager.features]
  enabledForHosting = false
  # Enable searching packages from the sidebar.
  packageSearch = true
  # Enable guessing what packages are needed from the code.
  guessImports = true

# These are the files that need to be preserved when this 
# language template is used as the base language template
# for Python repos imported from GitHub
[gitHubImport]
requiredFiles = [".replit", "replit.nix", ".config", "venv"]

[languages]

[languages.python3]
pattern = "**/*.py"

[languages.python3.languageServer]
start = "pylsp"

[deployment]
run = ["sh", "-c", "python3 main.py"]
2 Likes

Probably a temporary issue that happened to be fixed after commenting out the [env] section, which I wouldn’t recommend as it could break things in future.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.