Разработка пакетов

Пример

Пример пакета можно посмотреть по адресу https://github.com/JuliaLang/Example.jl

Ориентируясь на его структуру, вы можете создать свой пакет.

Вариант "просто файлом"

Если вам нужно создать модуль для решения конкретной текущей задачи, то вам не нужно создавать пакет: вы можете создать файл имя_модуля.jl со всеми объявлениями внутри module имя_модуля ... end и разместить этот файл в любом удобном месте, например в текущем каталоге, не создавая никаких папок вокруг него. Для его подключения останется или установить переменную окружения JULIA_LOAD_PATH="." или в тексте программы добавить путь поиска push!( LOAD_PATH, "."). После чего можно делать import имя_модуля или using имя_модуля.

Вариант "отдельный каталог"

Отдельный каталог, организованный вручную, удобен тем, что при переходе на новую версию Julia не потребуется переустановка ваших пакетов. Вторая причина сделать это - каталог со своими библиотеками можно расположить на общем ресурсе, чтобы иметь к нему доступ с нескольких машин. Особенно, если они не имеют доступа в интернет.

  • Создайте папку lalala/MyJuliaPackages для всех своих библиотек, где lalala - как вы поняли, путь до MyJuliaPackages.
  • В MyJuliaPackages создайте папку MyPackage1 для модуля MyPackage1.
  • В ней создайте папки src и test. (test - пока создавать необязательно. Она нужна, по соглашению, для хранения тестов пакета.)
  • В папке src создайте файл MyPackage1.jl.
  • В нем напишите:
module MyPackage1

f(x)=x+1

export ff 
ff(x) = x*2

end # of module
  • Теперь запустите julia, задав, предварительно переменную окружения JULIA_LOAD_PATH, указывающую на верхний уровень, где лежат все ваши модули:
JULIA_LOAD_PATH=lalala/MyJuliaPackages julia

При задании этой переменной окружения можно использовать относительный путь и, даже, ~ (домашний каталог пользователя в Linux), главное, чтобы он правильно указывал, относительно пути, откуда запущена Julia. Если в программе или REPL планируется смена текущего каталога командой cd(), то нужно будет сделать все необходимые use или import своих пакетов до смены текущего каталога.

  • в REPL должны быть доступны следующие обращения к этому модулю:
using MyPackage1

julia> MyPackage1.f(3)
4

julia> ff(3)
6

Перед определениями функций, если они - часть интерфейса, хорошо бы написать документацию по ним, например:

"""
f(x) -> my simple but cool summator. 
"""
f(x)=x+1

после изменения исходников, перезапустите REPL и наберите:

using MyPackage1
?> MyPackage1.f # - поставить знак вопроса в начале строки

вы увидите документацию по указанной функции.

Некоторые часто используемые инструкции можно поместить в ключ -e, при запуске julia:

JULIA_LOAD_PATH=lalala/MyJuliaPackages julia -e'using MyPackage1' -i

Вариант работы с Pkg и PkgDev

Предполагается, что вы умеете работать с git и имеете аккаунт на github.

Настроить:

$ git config --global user.name "FULL NAME"
$ git config --global user.email "EMAIL"

[ $ git config --global github.user "USERNAME" ]

Установить PkgDev:

Pkg.add("PkgDev"); import PkgDev

Сгенерировать структуру каталогов ~/./julia/vXX/FooBar:

PkgDev.generate("FooBar","MIT")

В папке ~/.julia// Будет находиться сгенерированная структура папок под управлением git.

Далее как обычно, работаем с git.

Работать с git, можно не выходя из REPL:

julia> cd(Pkg.dir("Many"))
shell> mcedit src/Many.jl
shell> git <command>

После того, как ваш пакет появится на github, его уже можно установить с помощью Pkg (используется clone, не add), например:

Pkg.clone("git://github.com/yourname/MyFirstPackage.jl.git")

Разработанный и доступный на github пакет, может быть зарегистрирован в https://github.com/JuliaLang/METADATA.jl по запросу. После этого он станет доступен для установки по простому имени, например:

Pkg.add("Lazy")

Удалить пакет можно командой rm:

Pkg.rm("Lazy")

Разумеется, пакет должен быть качественным, с тестами и заполненным файлом REQUIRE, если он имеет зависимости.

results matching ""

    No results matching ""