我想实例化内置在插件笔记本中的project.toml和本机包管理器。我怎么从笔记本上读出来呢?
比如说,我有一个笔记本,例如,
nb_source = "https://raw.githubusercontent.com/fonsp/Pluto.jl/main/sample/Interactivity.jl"我如何创建一个临时环境,并获得该笔记本项目的包?特别是,如何完成以下代码?
cd(mktempdir())
import Pkg; Pkg.activate(".")
import Pluto, Pkg
nb = download(nb_source, ".")
### Some code using Pluto's build in package manager
### to read the Project.toml from nb --> nb_project_toml
cp(nb_project_toml, "./Project.toml", force=true)
Pkg.instantiate(".")发布于 2022-10-30 12:13:23
所以,首先,你看到的笔记本是一个冥王星0.17.0笔记本,它没有内部包管理器。我认为它是在冥王星中添加的。
这就是使用内部冥王星包的笔记本中最后几个单元的样子:
# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
[compat]
Plots = "~1.32.0"
PlutoUI = "~0.7.40"
PyCall = "~1.94.1"
"""
# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised
julia_version = "1.8.0"
...所以你可以添加这样的东西:
import(nb)
write("./Project.toml", PLUTO_PROJECT_TOML_CONTENTS)这有一个缺点,运行所有的代码在你的笔记本,这可能需要一段时间。
或者,您可以读取笔记本文件,直到找到# ╔═╡ 00000000-0000-0000-0000-000000000001行,然后自己解析下面的字符串,或者在此之后解析所有内容(类似于eval(Meta.parse(string_stuff_after_comment))的操作应该是.)
我希望这能帮上点忙。
发布于 2022-11-01 10:32:31
Pluto.load_notebook_nobackup()读取笔记本的信息。这给出了字段.nbpkg_ctx.env.project.deps中dep的字典。
import Pluto, Pkg
Pkg.activate(;temp=true)
nb_source = "https://raw.githubusercontent.com/fonsp/Pluto.jl/main/sample/PlutoUI.jl.jl"
nb = download(nb_source)
nb_info = Pluto.load_notebook_nobackup(nb)
deps = nb_info.nbpkg_ctx.env.project.deps
Pkg.add([Pkg.PackageSpec(name=p, uuid=u) for (p, u) in deps])https://stackoverflow.com/questions/74244178
复制相似问题