错误:无法从URL或路径确定包名称

时间:2018-08-29 07:27:38

标签: package julia

我有一个存储库,其名称不是标准的Julia模块名称,例如git@github.com:ylxdzsw/oh-my-julia.jl.git

我曾经通过Pkg.clone("git@github.com:ylxdzsw/oh-my-julia.jl.git", "OhMyJulia")开发和使用它,并且效果很好。但是,它已被弃用,并且在Julia 0.7中克隆包的等效方法是使用] dev git@github.com:ylxdzsw/oh-my-julia.jl.git,但是我应该在哪里指定包名称?

(v0.7) pkg> dev git@github.com:ylxdzsw/oh-my-julia.jl.git OhMyJulia
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
  Updating git-repo `git@github.com:ylxdzsw/oh-my-julia.jl.git`
ERROR: cannot determine package name from URL or path: git@github.com:ylxdzsw/oh-my-julia.jl.git

julia> using Pkg

julia> Pkg.develop(PackageSpec(url="git@github.com:ylxdzsw/oh-my-julia.jl.git", name="OhMyJulia"))
  Updating git-repo `git@github.com:ylxdzsw/oh-my-julia.jl.git`
ERROR: cannot determine package name from URL or path: git@github.com:ylxdzsw/oh-my-julia.jl.git
Stacktrace:
 [1] pkgerror(::String) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/Types.jl:120
 [2] parse_package!(::Pkg.Types.Context, ::Pkg.Types.PackageSpec, ::String) at ./logging.jl:313
 [3] (::getfield(Pkg.Types, Symbol("##25#28")){Pkg.Types.Context,Array{Pkg.Types.PackageSpec,1},String})(::LibGit2.CachedCredentials) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/Types.jl:567
 [4] shred!(::getfield(Pkg.Types, Symbol("##25#28")){Pkg.Types.Context,Array{Pkg.Types.PackageSpec,1},String}, ::LibGit2.CachedCredentials) at ./secretbuffer.jl:184
 [5] handle_repos_develop! at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/Types.jl:498 [inlined]
 [6] #add_or_develop#13(::Symbol, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/API.jl:52
 [7] #add_or_develop at ./none:0 [inlined]
 [8] #add_or_develop#12 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/API.jl:29 [inlined]
 [9] #add_or_develop at ./none:0 [inlined]
 [10] #add_or_develop#10(::Base.Iterators.Pairs{Symbol,Any,Tuple{Symbol,Symbol},NamedTuple{(:mode, :shared),Tuple{Symbol,Bool}}}, ::Function, ::Pkg.Types.PackageSpec) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/API.jl:27
 [11] #add_or_develop at ./none:0 [inlined]
 [12] #develop#19 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/API.jl:70 [inlined]
 [13] develop(::Pkg.Types.PackageSpec) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/API.jl:70
 [14] top-level scope at none:0

1 个答案:

答案 0 :(得分:1)

如果您已经提供了name,似乎url已被丢弃。 Julia尝试解析您项目的URL以提取名称。但是,您在包名称中使用了破折号(-)。最终会出现错误,因为julia中的类型是运算符,因此不能在字符之间加短划线。

您可以通过使用正确的Project.toml条目为包的根目录创建一个项目文件(即name)来指定包的名称。

另一种简单的解决方案是将存储库的名称更改为OhMyJulia,不带破折号,以便可以从提供的URL确定名称。但是您应该添加Project.toml文件,这是指定包属性的正确方法(否则,您不能在包含项目文件的另一个项目中使用您的项目)

请参阅:https://docs.julialang.org/en/v1/stdlib/Pkg/