From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id +PxUAX01rmEpMwEAgWs5BA (envelope-from ) for ; Mon, 06 Dec 2021 17:08:29 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id cO+AOHw1rmEBQAAAbx9fmQ (envelope-from ) for ; Mon, 06 Dec 2021 16:08:28 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id D3AF86045 for ; Mon, 6 Dec 2021 17:08:27 +0100 (CET) Received: from localhost ([::1]:59892 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1muGXS-0001k2-Kw for larch@yhetil.org; Mon, 06 Dec 2021 11:08:26 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1muGFJ-0004Qp-QJ for guix-science@gnu.org; Mon, 06 Dec 2021 10:49:41 -0500 Received: from fossa.birch.relay.mailchannels.net ([23.83.209.62]:62764) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1muGFG-0004R0-Hg for guix-science@gnu.org; Mon, 06 Dec 2021 10:49:41 -0500 X-Sender-Id: dreamhost|x-authsender|peter@polidoro.io Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 7DD02E5B3F for ; Mon, 6 Dec 2021 15:49:31 +0000 (UTC) Received: from pdx1-sub0-mail-a239.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 0F0DDE3980 for ; Mon, 6 Dec 2021 15:49:31 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|peter@polidoro.io Received: from pdx1-sub0-mail-a239.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.127.242.190 (trex/6.4.3); Mon, 06 Dec 2021 15:49:31 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|peter@polidoro.io X-MailChannels-Auth-Id: dreamhost X-Industry-Callous: 0965b87e2c9f5baf_1638805771316_1140749761 X-MC-Loop-Signature: 1638805771316:3362852434 X-MC-Ingress-Time: 1638805771316 Received: from knave (unknown [206.241.0.254]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: peter@polidoro.io) by pdx1-sub0-mail-a239.dreamhost.com (Postfix) with ESMTPSA id 4J77CZ4lT5z3c for ; Mon, 6 Dec 2021 07:49:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=polidoro.io; s=polidoro.io; t=1638805770; bh=SGJoyXad1EFPggpAhp0dfVU+ZCQ=; h=From:To:Subject:Date:Content-Type; b=bMs9u2lFRbPb5ECzmBgcgryQTv4Wzb3J7zwe7GgF+ZkoXjze02Qv5NQXZ19eH3ONa 1yNhb/gLp0RUvb26F0BcP6a2mc74YAW5/BxSprMaR7BcuU/D6cf9TkW75w979fznA2 qzF7fBc3AYN1hkxswuLtYroQvKKdOae3SGHyiNCM= User-agent: mu4e 1.6.10; emacs 27.2 From: Peter Polidoro To: guix-science@gnu.org Subject: Reproducible Project Environments Date: Mon, 06 Dec 2021 09:18:28 -0500 Message-ID: <86lf0x3f9c.fsf@polidoro.io> MIME-Version: 1.0 Content-Type: text/plain; format=flowed Received-SPF: pass client-ip=23.83.209.62; envelope-from=peter@polidoro.io; helo=fossa.birch.relay.mailchannels.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 06 Dec 2021 11:08:12 -0500 X-BeenThere: guix-science@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-science-bounces+larch=yhetil.org@gnu.org Sender: "Guix-Science" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1638806908; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=+hfRyB5uxHEr0pu/LTMU2WQ4RuywJSLjwkrEdr5Hkyk=; b=FlrE1nz34211L83E/mBb7vyF+QdLNMEc7Y5fkguv9cmDvo8N/dgdf7VsLX3r0HQRHZtlPK PRZJlUNZaHRqm4maqipRzmxuq5jSTUcubXHcIHP8agCj61VunGN6t3cstxaERgCdY1mocf eBubInleYq64WfAgUgYkzKqKjdgkYCNPuT5Lh6S5+tftOnZSXe9hIxsjzMt4OMwpc1+6RH 5Ipi8Te3HiYPJk5ZRVPoDfiEormZmHnhCpsSn3SUA3Xc5j2aSkCiz9SyCcNrOfoFKIRITg rlQtws7i0GxagNNH1ZzTDMo8CPlsqZLrUX3mTdOjBfiDDd1GG+eo9rer6N1EVQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1638806908; a=rsa-sha256; cv=none; b=S3ajEtAn3wGqwd8WaCsY6YCuWtjkf3YyJmQWqR34lQ3R63La2QJ2nhP7x9/HPCz9sVrDv8 h86MHReTlYIkyUwIxTEhUZbuso7LFBLwCsN0rX4io+9b+V7g+JpzVMZVIFOYfyHHJPKiBT qslUAVT4xdBgyQy1LZxNcMbi1nm2P+ry1fE8a1seCHmzzNSbHMyDqcXyxWc3wwzo/9kI7u 9S/kNCogJ8xOVv4WWkFpg3TE0/pONpSvco0mfXTZTnm35uBgH8HVM0nsoEOQsWBzpz8U6m ADvtFOPSOJgW+F2/qOhKWfM6fD9n6itLawzJfbeJF+vmha15fl6fC9jiWePVKA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=polidoro.io header.s=polidoro.io header.b=bMs9u2lF; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-science-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-science-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -3.64 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=polidoro.io header.s=polidoro.io header.b=bMs9u2lF; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-science-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-science-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: D3AF86045 X-Spam-Score: -3.64 X-Migadu-Scanner: scn0.migadu.com X-TUID: 2LxOGBRhcjMi Guix is a wonderful way to distribute software, especially for science. Thank you all for such a fantastic project and community! I am an engineer working with scientists at the Howard Hughes Medical Institute, a science philanthropy based in the United States funding researchers all over the world. I hope to help convince the researchers I work with to all use Guix someday. My question is, what files do you recommend placing within a project directory to make it as straightforward as possible to distribute that project to others to develop and use in a reproducible environment? If all of the project dependencies are in Guix as packages, then a guix.scm or manifest.scm file seems all that is needed to create a reproducible environment using guix shell, as long as someone has Guix installed on their machine. What do you recommend when some of the project dependencies are not yet Guix packages? Obviously it would be best to get those dependencies into Guix as official packages eventually, but what is the best way to handle those dependencies until then? Say that in addition to some Guix packages, the project also needs some Python packages that are available on pypi, but are not yet Guix packages. Using something like direnv, an .envrc file in the project directory can install the Guix package dependencies into a local profile, then pip install the Python dependencies into a project local virtualenv. Then the user just needs Guix and direnv installed on their machine to get a reproducible environment when they change into that directory. Specifying dependencies in an .envrc file does not seem as elegant as using a pure Guix solution, however. What is the best way to handle these dependencies without using direnv and just Guix? Should I create Guix packages for the Python dependencies in an external custom channel? If so, how do you specify custom channels when using guix shell? Is there a method that is as simple as direnv or does it involve a user separately setting up a new profile to reference the custom channel before running guix shell? Do you ever create packages within a guix.scm file or a manifest.scm file or perhaps in a separate channel.scm file in the project directory to keep the project more self contained than referencing an external custom channel? Then would you create some project local profile that references this file to use when running guix shell? Or is the recommended approach to always use a custom channel before submitting the packages to be included into Guix proper? Thanks!