首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从冥王星笔记本中读取内置Project.toml?

如何从冥王星笔记本中读取内置Project.toml?
EN

Stack Overflow用户
提问于 2022-10-29 09:31:30
回答 2查看 40关注 0票数 1

我想实例化内置在插件笔记本中的project.toml和本机包管理器。我怎么从笔记本上读出来呢?

比如说,我有一个笔记本,例如,

代码语言:javascript
复制
nb_source = "https://raw.githubusercontent.com/fonsp/Pluto.jl/main/sample/Interactivity.jl"

我如何创建一个临时环境,并获得该笔记本项目的包?特别是,如何完成以下代码?

代码语言:javascript
复制
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(".")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-30 12:13:23

所以,首先,你看到的笔记本是一个冥王星0.17.0笔记本,它没有内部包管理器。我认为它是在冥王星中添加的。

这就是使用内部冥王星包的笔记本中最后几个单元的样子:

代码语言:javascript
复制
# ╔═╡ 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"
...

所以你可以添加这样的东西:

代码语言:javascript
复制
import(nb)
write("./Project.toml", PLUTO_PROJECT_TOML_CONTENTS)

这有一个缺点,运行所有的代码在你的笔记本,这可能需要一段时间。

或者,您可以读取笔记本文件,直到找到# ╔═╡ 00000000-0000-0000-0000-000000000001行,然后自己解析下面的字符串,或者在此之后解析所有内容(类似于eval(Meta.parse(string_stuff_after_comment))的操作应该是.)

我希望这能帮上点忙。

票数 1
EN

Stack Overflow用户

发布于 2022-11-01 10:32:31

Pluto.load_notebook_nobackup()读取笔记本的信息。这给出了字段.nbpkg_ctx.env.project.deps中dep的字典。

代码语言:javascript
复制
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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74244178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档