当前位置:K88软件开发文章中心编程语言非主流编程语言Julia → 文章内容

Julia 扩展包

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 16:28:29

由 陈 创建, 最后一次修改 2016-08-12 扩展包Julia 内置了一个包管理系统,可以用这个系统来完成包的管理,当然,你也可以用你的操作系统自带的,或者从源码编译。 你可以在 http://pkg.julialang.org 找到所有已注册(一种发布包的机制)的包的列表。 所有的包管理命令都包含在 Pkg 这个 module 里面,Julia 的 Base install 引入了 Pkg 。扩展包状态可以通过 Pkg.status() 这个方程,打印出一个你所有安装的包的总结。刚开始的时候,你没有安装任何包:: julia> Pkg.status() INFO: Initializing package repository /Users/stefan/.julia/v0.3 INFO: Cloning METADATA from git://github.com/JuliaLang/METADATA.jl No packages installed.当你第一次运行 Pkg 的一个命令时, 你的包目录(所有的包被安装在一个统一的目录下)会自动被初始化,因为 Pkg 希望有这样一个目录,这个目录的信息被包含于 Pkg.status() 中。这里是一个简单的,已经有少量被安装的包的例子: julia> Pkg.status() Required packages: - Distributions 0.2.8 - UTF16 0.2.0 Additional packages: - NumericExtensions 0.2.17 - Stats 0.2.6这些包,都是已注册了的版本,并且通过 Pkg 管理。 安装了的包可以是一个更复杂的"状态",通过"注释"来表明正确的版本;当我们遇到这些“状态”和“注释”时我们会解释的。为了编程需要,Pkg.installed() 返回一个字典,这个字典对应了安装了的包的名字和其现在使用的版本: julia> Pkg.installed() ["Distributions"=>v"0.2.8","Stats"=>v"0.2.6","UTF16"=>v"0.2.0","NumericExtensions"=>v"0.2.17"]添加和删除扩展包Julia 的包管理有一点不同这是因为它是生命而不是必要。这意味着你告诉它你想要什么,它就会知道安装什么版本(或移除)来有选择地满足那些需求 - 最低程度下地。所以不是安装一个包,你只是添加它到需求列表然后“解决”什么需要被安装。特别的,这意味着如果一些包因为它被你想要东西的前一个版本所需要而已经被安装,而且一个更新的版本不再有那个需求了,更新将真正移除那个包。你的包需求在文件 ~/.julia/v0.3/REQUIRE 中。你可以手动编辑这个文件,然后调用 Pkg.resolve() 方法来安装,升级或者移除包来有选择地满足需求,或者你可以做 Pkg.edit(),它将在你的编辑器中打开 REQUIRE(通过 EDITOR 或者 VISUAL 环境变量配置),然后之后自动调用 Pkg.resolve(),如果有必要的话。如果你仅仅想要添加或者移除一个单一包的需求,你也可以使用非交互的 Pkg.add 和 Pkg.rm 命令,它添加或移除一个单一的需求来 REQUIRE,然后调用 Pkg.resolve()。你可以用 Pkg.add 函数添加一个包到需求列表,这个包和所有它所依赖的包都将被安装: julia> Pkg.status() No packages installed. julia> Pkg.add("Distributions") INFO: Cloning cache of Distributions from git://github.com/JuliaStats/Distributions.jl.git INFO: Cloning cache of NumericExtensions from git://github.com/lindahua/NumericExtensions.jl.git INFO: Cloning cache of Stats from git://github.com/JuliaStats/Stats.jl.git INFO: Installing Distributions v0.2.7 INFO: Installing NumericExtensions v0.2.17 INFO: Installing Stats v0.2.6 INFO: REQUIRE updated. julia> Pkg.status() Required packages: - Distributions 0.2.7 Additional packages: - NumericExtensions 0.2.17 - Stats 0.2.6这所做的事情首先是添加 Distributions 到你的 ~/.julia/v0.3/REQUIRE 文件: $ cat ~/.julia/v0.3/REQUIRE Distributions然后它使用这些新的需求运行 Pkg.resolve(),它导向了 Distributions 包应该被安装因为它是必需的而且没有被安装的结论。正如之前所声明的,你可以通过手动编辑你的 ~/.julia/v0.3/REQUIRE 文件完成相同的事情然后自己运行 Pkg.resolve()。 $ echo UTF16 >> ~/.julia/v0.3/REQUIRE julia> Pkg.resolve() INFO: Cloning cache of UTF16 from git://github.com/nolta/UTF16.jl.git INFO: Installing UTF16 v0.2.0 julia> Pkg.status() Required packages: - Distributions 0.2.7 - UTF16 0.2.0 Additional packages: - NumericExtensions 0.2.17 - Stats 0.2.6这和调用 Pkg.add("UTF16")功能相同,除了 Pkg.add 直到在安装完成之后才改变 REQUIRE,所以如果有问题的话,REQUIRE 将被剩下,正如在调用 Pkg.add 之前。REQUIRE 文件的格式在 Requirements Specification中被描述;它允许在其他事物中获得特定包版本的范围。 当你决定你不想再拥有一个包,你可以使用 Pkg.rm 来从 REQUIRE 文件移除它的需求: julia> Pkg.rm("Distributions") INFO: Removing Distributions v0.2.7 INFO: Removing Stats v0.2.6 INFO: Removing NumericExtensions v0.2.17 INFO: REQUIRE updated. julia> Pkg.status() Required packages: - UTF16 0.2.0 julia> Pkg.rm("UTF16") INFO: Removing UTF16 v0.2.0 INFO: REQUIRE updated. julia> Pkg.status() No packages installed.再一次,这和编辑 REQUIRE 文件来移除有着包名的那一行然后运行 Pkg.resolve()来更改安装包的集合来匹配相类似。尽管 Pkg.add 和 Pkg.rm 对于添加和移除单个包的需求来说是方便的,当你想要添加或移除多个包时,你可以调用 Pkg.edit()来手动地改变 REQUIRE 的内容然后根据情况更新你的包。Pkg.edit()不回滚 REQUIRE 的内容如果 Pkg.resolve()失效 - 不如说,你不得不再一次运行 Pkg.edit()来修改文档内容。因为包管理内部使用 git 来管理包 git 仓库,当运行 Pkg.add 时,用户可能会碰上协议的问题(比如在一个防火墙后)。接下来的命令可在命令行中被运

[1] [2] [3]  下一页


Julia 扩展包