ОШИБКА: невозможно определить имя пакета по URL или пути - PullRequest
0 голосов
/ 29 августа 2018

У меня есть репо, имя которого не является стандартным именем модуля 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 голосов
/ 29 августа 2018

Кажется, что name отбрасывается, если вы уже предоставили url. Джулия пытается разобрать URL вашего проекта, чтобы извлечь имя. Однако вы использовали тире (-) в том, что должно быть именем пакета. В конечном итоге это приводит к ошибке, потому что типы в julia не могут иметь тире между символами, поскольку это оператор.

Вы можете указать имя пакета, создав файл проекта (т.е. Project.toml) для корневого каталога вашего пакета с правильной name записью.

Другое простое решение - изменить имя репозитория на OhMyJulia без черточек, чтобы имя можно было определить по предоставленному URL. Но вы должны добавить файл Project.toml, это правильный способ указать свойства пакета (иначе вы не сможете использовать свой проект в другом проекте, который содержит файл проекта)

См .: https://docs.julialang.org/en/v1/stdlib/Pkg/

...