From patchwork Fri Feb 14 15:22:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Simon Tournier X-Patchwork-Id: 38605 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 064F527BBEA; Fri, 14 Feb 2025 18:09:40 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id E1BC427BBE2 for ; Fri, 14 Feb 2025 18:09:38 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tj07s-0008D3-N5; Fri, 14 Feb 2025 13:09:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tj07a-0008Cj-EK for guix-patches@gnu.org; Fri, 14 Feb 2025 13:09:02 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tj07a-0000NK-5D for guix-patches@gnu.org; Fri, 14 Feb 2025 13:09:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:Date:References:In-Reply-To:From:To:Subject; bh=4qbvQhTIUAdQaxLAIQVw1oH0LlnRiHm38OMwTvLVnRY=; b=ZEfqThA3iTs3gJLQ4I0Pa+YR6ojR8KhROfWZMVhoWljG0EISDT5ADOUrf14k4BjbKG9BmtzznpLi5b1dgVx4b0v4/+H6HhlYwvn6EGTY8GtjQzEJ0nS2ShHYuPwJQ8BVJKxEnyptOVyRjWNQGKyzQf8A96QG9QjYPLCpjt3vJWmxxB7W7NLy/YyDj+57V5K0Syis8IpzmbHBeujejd+g0obhncSipmy93kMxv6Tzmnd/dOzzrhvqb09mfRYJqRCQPagwD8UBtOO9LcRaOssMLmJf8bKbo+98anNqOG7JSXQ6+hUZBvcO4rGtV2kyM3qKDcj6AFKjV4JtyJ6Kk9T65Q==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1tj07Z-0008FX-Pz for guix-patches@gnu.org; Fri, 14 Feb 2025 13:09:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#73197] [PATCH] gnu: julia: Update to 1.9.3. Resent-From: Simon Tournier Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 14 Feb 2025 18:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73197 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?utf-8?q?Court=C3=A8s?= Cc: 73197@debbugs.gnu.org, Efraim Flashner , Philippe Virouleau Received: via spool by 73197-submit@debbugs.gnu.org id=B73197.173955651931672 (code B ref 73197); Fri, 14 Feb 2025 18:09:01 +0000 Received: (at 73197) by debbugs.gnu.org; 14 Feb 2025 18:08:39 +0000 Received: from localhost ([127.0.0.1]:51655 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tj07C-0008El-TR for submit@debbugs.gnu.org; Fri, 14 Feb 2025 13:08:39 -0500 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:58851) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1tj079-0008ES-W8 for 73197@debbugs.gnu.org; Fri, 14 Feb 2025 13:08:37 -0500 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4362bae4d7dso15104155e9.1 for <73197@debbugs.gnu.org>; Fri, 14 Feb 2025 10:08:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739556510; x=1740161310; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=4qbvQhTIUAdQaxLAIQVw1oH0LlnRiHm38OMwTvLVnRY=; b=TEP8cE236USUg2MKhaBOjcEg9WqMhtpq0PKpEQMrS5DW3B6lukeNPxy6Vk19fGGTIW FSNOlMXAS1FiquSPYZ15iQA9Wd6P2ryORMqLFXGaqSUWtnnWBtyniaXdVAwsJCoCFZrM pQWtUg9OBRyWSnp0ox+ILNYB9uDpkCoySqjMRvftYanRMO3wnu6fQyewE9CkUUegVYK8 E9N48R6hebF+5Yw0oz+W0MFyhVqTWp1dTVWOu4qH6xHKHwSnFjyr1X14dyFpNE+GR6RP EreTltn6lZ/80N3zLr89hc7j42atrV+lRuTKxUG38CRcsWbX6FZR/7ivfhaQeSGlqNMo EeIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739556510; x=1740161310; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4qbvQhTIUAdQaxLAIQVw1oH0LlnRiHm38OMwTvLVnRY=; b=bh4NcH18fvzkv/S/Eyl9L5NtXMRl5szVxl7w1ZMORzOrlCmCiYrimKddNGSX3KJWQr oaNnZLmaOX9pAvfD0RG359Q7snUlQnsro+XjW0qOIIWlU6fmgu8NK/hfrkp8OVuf00qC KKDbxvkTKR1ePff+nydvIwm7zJ8r9yP/oHHSBybrSWwOTHO3RDXePn2eOfAk/6NL7Exz H5eX/IMQcvxxC5uTTWBCDr4gfI2sHaC3tbqbVUm9YZXavgOKOfNZQamp0HBozZbnJ//c iSGAWbUproBGKqY+9qc0yCVtw0gkZ5Fb/xbvWdsyDnH40/Fx91avkod54QHFvaI2stZ3 zKqA== X-Gm-Message-State: AOJu0Yyu0O3/JqQdEYxwBoQME9LMV1XnFtw7UosHteSeMlaVqygLpomr umFXJJxxycj+Pzmvs2Pd+kYJtypjtFWqTIfEw2OsOQU9RPUKAF5q X-Gm-Gg: ASbGncvX6OSSoWFBCO7OfRB3zY89cxpU9bJkca2Me6lvwmeCReJNXMwhqvW5oP1UE5z kH/Tz80AEgMOc/UQ+W8l2k1QxWsnDBr2cIUJLojN/cbiMlzzGM8iCt2setcmO/LRGqytEWaJFPn ydNy56jgHglARCNPxTD78lN4KSfVf3mdO1ehHVb+6/n3MbBy3P7Stz3BSq5scBAQzshmQ1JqXla luN2gfBbbavomi3o8l37rBhjKgHjul7dRxDVaxEocGZHwZ+e2kV5X577T0V7IJTn/uJK6qbP7QB h3Oq4uTQBhE2GGM= X-Google-Smtp-Source: AGHT+IFtsF00qd2jHCze3E0bQuKJBl3rUgktmvxu8ThGC+g8spHtwcq+pzHNZBXXNjmPWTYx0606PA== X-Received: by 2002:a05:600c:3593:b0:439:6dfc:232 with SMTP id 5b1f17b1804b1-4396e6ca465mr3064605e9.8.1739556509280; Fri, 14 Feb 2025 10:08:29 -0800 (PST) Received: from pfiuh07 ([193.48.40.241]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4396180f199sm49907875e9.15.2025.02.14.10.08.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 10:08:28 -0800 (PST) From: Simon Tournier In-Reply-To: <87bjwa4lcb.fsf@gmail.com> References: <87ed5k7wx5.fsf@gnu.org> <87a5g2tkbe.fsf@gmail.com> <87frlw3q3o.fsf@gmail.com> <87cygxvb47.fsf@gnu.org> <87bjwa4lcb.fsf@gmail.com> Date: Fri, 14 Feb 2025 16:22:15 +0100 Message-ID: <87ikpc5z6g.fsf@gmail.com> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches Hi, On Mon, 13 Jan 2025 at 19:31, Simon Tournier wrote: > For the record, it’s about base/loading.jl: > > --8<---------------cut here---------------start------------->8--- > try > toplevel_load[] = false > # perform the search operation to select the module file require intends to load > - path = locate_package(pkg) > + path = locate_package(pkg, env) > if path === nothing > throw(ArgumentError(""" > Package $pkg is required but does not seem to be installed: > --8<---------------cut here---------------end--------------->8--- Welcome to a debugging session using the most advanced technique: print! :-) Attached the base/loading.jl with many ’println’. Well, that’s very interesting because it seems related to some Julia internals. Somehow, the order of LOAD_PATH matters! In all the dance, the code enters once and it founds it! --8<---------------cut here---------------start------------->8--- ENTRY _require: Call locate_package( ConstructionBase [187b0558-2788-49d3-abe0-74a17ed4e7c9] , /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ ) [...] RESULT _require: path = /gnu/store/yg4bz2kb7dqb6haaj0v7hj4mrd8rn27l-julia-constructionbase-1.3.0/share/julia/loadpath/ConstructionBase/src/ConstructionBase.jl --8<---------------cut here---------------end--------------->8--- Then, it enters later with the same call… And bang! --8<---------------cut here---------------start------------->8--- ENTRY _require: Call locate_package( ConstructionBase [187b0558-2788-49d3-abe0-74a17ed4e7c9] , /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ ) [...] RESULT _require: path = nothing ERROR: LoadError: ArgumentError: Package ConstructionBase [187b0558-2788-49d3-abe0-74a17ed4e7c9] is required but does not seem to be installed: - Run `Pkg.instantiate()` to install all recorded dependencies. --8<---------------cut here---------------end--------------->8--- What’s different? The call loops over load_path(), something like: --8<---------------cut here---------------start------------->8--- locate_package_env: START LOOP; over load_path() = ["/gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/environments/v1.9/Project.toml", "/gnu/store/cp0fbzd4j1znnp4fjpsknap0ksnp2xk1-julia-1.9.3/share/julia/stdlib/v1.9", "/gnu/store/yg4bz2kb7dqb6haaj0v7hj4mrd8rn27l-julia-constructionbase-1.3.0/share/julia/loadpath/", "/gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/"] locate_package_env: loop = 1 locate_package_env: env = /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/environments/v1.9/Project.toml locate_package_env: path = nothing locate_package_env: loop = 2 locate_package_env: env = /gnu/store/cp0fbzd4j1znnp4fjpsknap0ksnp2xk1-julia-1.9.3/share/julia/stdlib/v1.9 locate_package_env: path = nothing locate_package_env: loop = 3 locate_package_env: env = /gnu/store/yg4bz2kb7dqb6haaj0v7hj4mrd8rn27l-julia-constructionbase-1.3.0/share/julia/loadpath/ locate_package_env: path = /gnu/store/yg4bz2kb7dqb6haaj0v7hj4mrd8rn27l-julia-constructionbase-1.3.0/share/julia/loadpath/ConstructionBase/src/ConstructionBase.jl --8<---------------cut here---------------end--------------->8--- And for the second case, tandam! --8<---------------cut here---------------start------------->8--- locate_package_env: START LOOP; over load_path() = ["/tmp/.julia/environments/v1.9/Project.toml", "/gnu/store/cp0fbzd4j1znnp4fjpsknap0ksnp2xk1-julia-1.9.3/share/julia/stdlib/v1.9", "/gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/", "/gnu/store/yg4bz2kb7dqb6haaj0v7hj4mrd8rn27l-julia-constructionbase-1.3.0/share/julia/loadpath/"] locate_package_env: loop = 1 locate_package_env: env = /tmp/.julia/environments/v1.9/Project.toml locate_package_env: path = nothing locate_package_env: loop = 2 locate_package_env: env = /gnu/store/cp0fbzd4j1znnp4fjpsknap0ksnp2xk1-julia-1.9.3/share/julia/stdlib/v1.9 locate_package_env: path = nothing locate_package_env: loop = 3 locate_package_env: env = /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ locate_package_env: path = nothing locate_package_env: BREAK: /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ == /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ locate_package_env: : loading_extension = false locate_package_env: : precompiling_extension = false locate_package_env: END LOOP locate_package_env: pkg = ConstructionBase [187b0558-2788-49d3-abe0-74a17ed4e7c9] locate_package_env: Sys.STDLIB = /gnu/store/cp0fbzd4j1znnp4fjpsknap0ksnp2xk1-julia-1.9.3/share/julia/stdlib/v1.9 locate_package_env: Call manifest_uuid_path( /gnu/store/cp0fbzd4j1znnp4fjpsknap0ksnp2xk1-julia-1.9.3/share/julia/stdlib/v1.9 , ConstructionBase [187b0558-2788-49d3-abe0-74a17ed4e7c9] ) locate_package_env: mbypath = nothing String? false locate_package_env: RETURN: path = nothing ; env = /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ locate_package: RETURN: nothing _require: Post locate_package( ConstructionBase [187b0558-2788-49d3-abe0-74a17ed4e7c9] , /gnu/store/garmz1dz382ib25p2ckl0kj9rjay4xd4-julia-unitful-1.12.2/share/julia/loadpath/ ) RESULT _require: path = nothing --8<---------------cut here---------------end--------------->8--- The attentive reader notes that load_path() is a list of 4 elements –the last contains what we want– but a test breaks the loop. Well, I do not know the details about the reasons of all that. Maybe something worth to ask upstream. :-) Well, I’ll (force) push shortly a trivial fix to the branch wip-julia-upgrade. Cheers, simon PS: For the record, some elements: 1. Checkout wip-julia-upgrade 2. cp $(./pre-inst-env guix build julia -S) /tmp/ 3. Uncompress the source and copy (e.g., /home/simon/tmp/julia-1.9.3) 4. Tweak the base/loading.jl file (and other as base/initdefs.jl) 5. Use this source with: (source (local-file "/home/simon/tmp/julia-1.9.3" #:recursive? #t)) 6. guix shell -CPNWD guix --expose=/home/simon/tmp/=/home/simon/tmp/ 7. Build: ./pre-inst-env guix build --no-grafts --without-tests=julia julia 8. Tweak guix/build-system/julia-build-system.scm 9. Loop ./pre-inst-env guix build --no-grafts --without-tests=julia julia-unitful Hope that helps. --- /tmp/julia-1.9.3/base/loading.jl 1970-01-01 01:00:01.000000000 +0100 +++ /home/simon/tmp/julia-1.9.3/base/loading.jl 2025-02-14 15:38:59.879047968 +0100 @@ -391,6 +391,7 @@ identify_package(name::String) = _nothing_or_first(identify_package_env(name)) function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) + println("locate_package_env: ARGS: ", pkg, " , ", stopenv) cache = LOADING_CACHE[] if cache !== nothing pathenv = get(cache.located, (pkg, stopenv), nothing) @@ -399,6 +400,7 @@ path = nothing env′ = nothing if pkg.uuid === nothing + println("locate_package_env: Case: nothing... TODO") for env in load_path() env′ = env # look for the toplevel pkg `pkg.name` in this entry @@ -418,9 +420,18 @@ end end else + println("locate_package_env: pkg = ", pkg) + println("locate_package_env: START LOOP; over load_path() = ", load_path()) + #println("locate_package_env: number of loop", length(load_path)) + loop = 1 for env in load_path() + println("locate_package_env: loop = ", loop) + println("locate_package_env: env = ", env) env′ = env + println("locate_package_env: Call manifest_uuid_path( ", env, " , ", pkg, " )") path = manifest_uuid_path(env, pkg) + println("locate_package_env: Post path = manifest_uuid_path( ", env, " , ", pkg, " )") + println("locate_package_env: path = ", path) # missing is used as a sentinel to stop looking further down in envs if path === missing path = nothing @@ -431,14 +442,27 @@ @goto done end if !(loading_extension || precompiling_extension) + stopenv == env && println("locate_package_env: BREAK: ", stopenv, " == ", env) + stopenv == env && println("locate_package_env: : loading_extension = ", loading_extension) + stopenv == env && println("locate_package_env: : precompiling_extension = ", precompiling_extension) stopenv == env && break end + loop = loop + 1 end + println("locate_package_env: END LOOP; No more env") # Allow loading of stdlibs if the name/uuid are given # e.g. if they have been explicitly added to the project/manifest + println("locate_package_env: pkg = ", pkg) + println("locate_package_env: Sys.STDLIB = ", Sys.STDLIB) + println("locate_package_env: Call manifest_uuid_path( ", Sys.STDLIB, " , ", pkg, " )") mbypath = manifest_uuid_path(Sys.STDLIB, pkg) + println("locate_package_env: Post mbypath = manifest_uuid_path( ", Sys.STDLIB, " , ", pkg, " )") + println("locate_package_env: mbypath = ", mbypath, " String? ", mbypath isa String) if mbypath isa String + println("locate_package_env: Call entry_path( ", mbypath, " , ", pkg.name, " )") path = entry_path(mbypath, pkg.name) + println("locate_package_env: Post path = entry_path( ", mbypath, " , ", pkg.name, " )") + println("locate_package_env: path = ", path) @goto done end end @@ -446,6 +470,7 @@ if cache !== nothing cache.located[(pkg, stopenv)] = path, env′ end + println("locate_package_env: RETURN: path = ", path, " ; env = ", env′) return path, env′ end @@ -464,7 +489,11 @@ ``` """ function locate_package(pkg::PkgId, stopenv::Union{String, Nothing}=nothing)::Union{Nothing,String} - _nothing_or_first(locate_package_env(pkg, stopenv)) + println("locate_package: ARGS: ", pkg, " , ", stopenv) + println("locate_package: Call locate_package_env(", pkg, " , ", stopenv, " )") + ret = _nothing_or_first(locate_package_env(pkg, stopenv)) + println("locate_package: RETURN: ", ret) + return ret end """ @@ -581,9 +610,14 @@ # - `path`: the path of an explicit project file function env_project_file(env::String)::Union{Bool,String} @lock require_lock begin + println("env_project_file: ARGS: ", env) cache = LOADING_CACHE[] if cache !== nothing + println("env_project_file: cache = ", cache) + println("env_project_file: cache.env_project_file = ", cache.env_project_file) project_file = get(cache.env_project_file, env, nothing) + println("env_project_file: project_file = ", project_file) + project_file === nothing || println("env_project_file: RETURN: ", project_file) project_file === nothing || return project_file end if isdir(env) @@ -596,6 +630,7 @@ if cache !== nothing cache.env_project_file[env] = project_file end + println("env_project_file: RETURN: ", project_file) return project_file end end @@ -651,20 +686,31 @@ end function manifest_uuid_path(env::String, pkg::PkgId)::Union{Nothing,String,Missing} + println("manifest_uuid_path: ARGS: ", env, " , ", pkg) + println("manifest_uuid_path: Call env_project_file( ", env, " )") project_file = env_project_file(env) + println("manifest_uuid_path: Post project_file = env_project_file( ", env, " )") + println("manifest_uuid_path: project_file = ", project_file, " String? ", project_file isa String) if project_file isa String proj = project_file_name_uuid(project_file, pkg.name) if proj == pkg # if `pkg` matches the project, return the project itself - return project_file_path(project_file) + ret = project_file_path(project_file) + println("manifest_uuid_path: RETURN: (1) ", ret) + return end mby_ext = project_file_ext_path(project_file, pkg.name) + mby_ext === nothing || println("manifest_uuid_path: RETURN: (2) ", mby_ext) mby_ext === nothing || return mby_ext # look for manifest file and `where` stanza - return explicit_manifest_uuid_path(project_file, pkg) + ret = explicit_manifest_uuid_path(project_file, pkg) + println("manifest_uuid_path: RETURN: (3) ", ret) + return ret elseif project_file # if env names a directory, search it - return implicit_manifest_uuid_path(env, pkg) + ret = implicit_manifest_uuid_path(env, pkg) + println("manifest_uuid_path: RETURN: (4) ", ret) + return ret end return nothing end @@ -1758,6 +1804,7 @@ # Returns `nothing` or the new(ish) module function _require(pkg::PkgId, env=nothing) + println("_require: ARGS: ", pkg, " , ", env) assert_havelock(require_lock) # handle recursive calls to require loading = get(package_locks, pkg, false) @@ -1772,7 +1819,10 @@ try toplevel_load[] = false # perform the search operation to select the module file require intends to load + println("ENTRY _require: Call locate_package( ", pkg, " , ", env, " )") path = locate_package(pkg, env) + println("_require: Post locate_package( ", pkg, " , ", env, " )") + println("RESULT _require: path = ", path) if path === nothing throw(ArgumentError(""" Package $pkg is required but does not seem to be installed: