Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/python/scripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ command uses `--script <PATH>`, so the same `run`, `add`, `remove`, `install`,
`lock`, and `update` commands used for workspaces operate on either a manifest
or a standalone file.

For files in other languages there is an experimental
[`conda-script` block](../tutorials/conda_script.md) that embeds the same
kind of metadata in any code file.

## Make a script self-contained

This script downloads the USGS earthquake feed with `httpx`, then uses GDAL's
Expand Down
16 changes: 16 additions & 0 deletions docs/source_files/conda_scripts/main.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# /// conda-script
# channels = ["https://prefix.dev/conda-forge"]
# entrypoint = "Rscript ${SCRIPT}"
#
# [dependencies]
# r-base = "*"
# r-jsonlite = "*"
# /// end-conda-script
library(jsonlite)

document <- list(
name = "conda-script",
languages = c("r", "python"),
count = 2
)
writeLines(toJSON(document, auto_unbox = TRUE, pretty = TRUE))
17 changes: 17 additions & 0 deletions docs/source_files/conda_scripts/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// /// conda-script
// channels = ["https://prefix.dev/conda-forge"]
// entrypoint = "gcc -o ${CACHE}/main ${SCRIPT} $(pkg-config --cflags --libs glib-2.0) && ${CACHE}/main"
//
// [dependencies]
// gcc = "*"
// glib = "*"
// pkg-config = "*"
// /// end-conda-script
#include <glib.h>

int main(void) {
gchar *digest = g_compute_checksum_for_string(G_CHECKSUM_SHA256, "conda-script", -1);
g_print("sha256(\"conda-script\") = %s\n", digest);
g_free(digest);
return 0;
}
17 changes: 17 additions & 0 deletions docs/source_files/conda_scripts/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// /// conda-script
// channels = ["https://prefix.dev/conda-forge"]
// entrypoint = "g++ -o ${CACHE}/main ${SCRIPT} -lfmt && ${CACHE}/main"
//
// [dependencies]
// gxx = "*"
// fmt = "*"
// /// end-conda-script
#include <fmt/core.h>
#include <fmt/ranges.h>
#include <vector>

int main() {
std::vector<int> primes{2, 3, 5, 7, 11};
fmt::print("primes: {}\n", fmt::join(primes, ", "));
fmt::print("pi is roughly {:.3f}\n", 3.14159);
}
15 changes: 15 additions & 0 deletions docs/source_files/conda_scripts/main.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// /// conda-script
// channels = ["https://prefix.dev/conda-forge"]
// entrypoint = "dotnet run ${SCRIPT}"
//
// [dependencies]
// dotnet = "*"
// /// end-conda-script

#:package Newtonsoft.Json@13.*

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

var payload = new JObject { ["item"] = "answer", ["value"] = 42 };
Console.WriteLine(payload.ToString(Formatting.None));
19 changes: 19 additions & 0 deletions docs/source_files/conda_scripts/main.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
! /// conda-script
! channels = ["https://prefix.dev/conda-forge"]
! entrypoint = "gfortran -o ${CACHE}/main ${SCRIPT} -llapack -lblas && ${CACHE}/main"
!
! [dependencies]
! gfortran = "*"
! liblapack = "*"
! /// end-conda-script
program solve
implicit none
real(8) :: a(2, 2), b(2)
integer :: ipiv(2), info

a = reshape([2.0d0, 1.0d0, 1.0d0, 3.0d0], [2, 2])
b = [5.0d0, 10.0d0]
call dgesv(2, 1, a, 2, ipiv, b, 2, info)
write (*, '(a, i0)') 'info = ', info
write (*, '(a, 2f8.3)') 'x =', b
end program solve
15 changes: 15 additions & 0 deletions docs/source_files/conda_scripts/main.main.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// /// conda-script
// channels = ["https://prefix.dev/conda-forge"]
// entrypoint = "kotlin ${SCRIPT}"
//
// [dependencies]
// kotlin = "*"
// /// end-conda-script
@file:DependsOn("com.google.code.gson:gson:2.13.1")

import com.google.gson.GsonBuilder

data class Language(val name: String, val year: Int)

val gson = GsonBuilder().setPrettyPrinting().create()
println(gson.toJson(Language("kotlin", 2011)))
23 changes: 23 additions & 0 deletions docs/source_files/conda_scripts/main.mojo
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# /// conda-script
# channels = [
# "https://prefix.dev/modular-community",
# "https://conda.modular.com/max",
# "https://prefix.dev/conda-forge",
# ]
# entrypoint = "mojo ${SCRIPT}"
#
# [dependencies]
# mojo = "*"
# emberjson = "*"
# /// end-conda-script

from emberjson import parse, to_string


def main() raises:
var document = parse(
'{"name": "conda-script", "languages": ["mojo", "python"], "count": 2}'
)
ref languages = document.object()["languages"].array()
print("languages:", len(languages), "first:", languages[0].string())
print(to_string[pretty=True](document))
20 changes: 20 additions & 0 deletions docs/source_files/conda_scripts/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# /// conda-script
# channels = ["https://prefix.dev/conda-forge"]
# entrypoint = "python ${SCRIPT}"
#
# [dependencies]
# python = "*"
# pyyaml = "*"
# /// end-conda-script
import yaml

document = yaml.safe_load(
"""
name: conda-script
languages:
- python
- c
"""
)
document["count"] = len(document["languages"])
print(yaml.safe_dump(document, sort_keys=True), end="")
12 changes: 12 additions & 0 deletions docs/source_files/conda_scripts/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// /// conda-script
// channels = ["https://prefix.dev/conda-forge"]
// entrypoint = "deno run ${SCRIPT}"
//
// [dependencies]
// deno = "*"
// /// end-conda-script

import { chunk } from "npm:lodash-es@4";

const pairs: string[][] = chunk(["a", "b", "c", "d"], 2);
console.log(JSON.stringify(pairs));
Loading
Loading