Как запустить проект Юлии?

Джулии пока нет в моей рулевой рубке, но мне передали проект Джулии, внутри которого можно запустить код. Он состоит из каталога, содержащего main.jl, Project.toml и Manifest.toml.

Я немного прочитал, для чего нужны файлы TOML; Подводя итог моему текущему пониманию, они образуют проект или среду (не уверен, что и в чем реальная разница).

Я установил Julia v1.3.1 в командной строке, загрузив tar, распаковав и поместив на свой путь. Если ввести julia в командной строке, откроется Julia CLI REPL, как и ожидалось.

Я попытался запустить код с помощью julia main.jl, это приводит к жалобам на отсутствие необходимых пакетов, например:

julia main.jl
ERROR: LoadError: ArgumentError: Package JSON not found in current path:
- Run `import Pkg; Pkg.add("JSON")` to install the JSON package.

Stacktrace:
 [1] require(::Module, ::Symbol) at ./loading.jl:887
 [2] include at ./boot.jl:328 [inlined]
 [3] include_relative(::Module, ::String) at ./loading.jl:1105
 [4] include(::Module, ::String) at ./Base.jl:31
 [5] exec_options(::Base.JLOptions) at ./client.jl:287
 [6] _start() at ./client.jl:460
in expression starting at /home/<user>/myproject/main.jl:3

Я могу следовать приведенным здесь инструкциям и загружать необходимые пакеты, но, конечно же, мне не следует делать это вручную для каждого пакета? Поскольку каждый требуемый пакет указан в Project.toml, я думаю, должен быть какой-то способ сообщить Джулии, чтобы она обеспечила доступность пакетов в проекте (я думаю что-то вроде файла требований Python).

Я пробовал julia --project=main.jl, но это просто приводит к повторной загрузке REPL, при этом ничего не происходит (не уверен, загружен ли какой-либо проект или среда или нет).

Как я могу сказать Джулии запустить сценарий в этом проекте, принимая во внимание требования и другую информацию в файлах TOML?

Обновление: придумали ввести ] в REPL, чтобы войти в pkg диспетчер пакетов. Тогда я могу:

(v1.3) pkg> activate .
Activating environment at `~/myproject/Project.toml`

(myproject) pkg> instantiate

(myproject) pkg>

Затем выйдите из менеджера, нажав клавишу Backspace. Тем не менее, все еще не уверен, как все «запустить».


person Toby    schedule 16.03.2020    source источник


Ответы (2)


Вы очень близки к решению! Если все файлы находятся в каталоге dir, команда будет выглядеть так:

julia --project=dir main.jl

Вы также можете запустить интерактивный сеанс в этой среде, а затем запустить код в файле через

julia --project=dir

julia> include(“main.jl”)

Изменить: если каталог является текущим рабочим каталогом, вы можете просто использовать --project=.

person Eric    schedule 16.03.2020
comment
Оказывается, сценарий не был настроен для немедленного запуска. После includeing, как в этом ответе, мне нужно было вызвать функцию, которую я хотел запустить, например julia> main("some string", SomeConstant). - person Toby; 17.03.2020

Сообщение об ошибке Package JSON not found in current path означает, что у вас не установлен JSON.

Вы можете проверить это, запустив Julia и набрав using JSON

Чтобы установить JSON, вам достаточно написать import Pkg; Pkg.add("JSON")

См. Этот вывод, например:

$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.5.2 (2020-09-23)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using JSON
ERROR: ArgumentError: Package JSON not found in current path:
- Run `import Pkg; Pkg.add("JSON")` to install the JSON package.

Stacktrace:
 [1] require(::Module, ::Symbol) at ./loading.jl:893

julia> import Pkg; Pkg.add("JSON")
   Updating registry at `~/.julia/registries/General`
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
  Resolving package versions...
Updating `~/.julia/environments/v1.5/Project.toml`
  [682c06a0] + JSON v0.21.1
Updating `~/.julia/environments/v1.5/Manifest.toml`
  [682c06a0] + JSON v0.21.1
  [69de0a69] + Parsers v1.1.0
  [ade2ca70] + Dates
  [a63ad114] + Mmap
  [de0858da] + Printf
  [4ec0a83e] + Unicode

julia> using JSON
[ Info: Precompiling JSON [682c06a0-de6a-54ab-a142-c8b1cf79cde6]

julia> 
person Yogev Neumann    schedule 24.05.2021