Допустим, у нас есть массив символов пакетов packages::Vector{Symbol} = [...]
, и мы хотим создать образ sys, используя PackageCompiler.jl . Мы могли бы просто использовать
using PackageCompiler
create_sysimage(packages; incremental = false, sysimage_path = "custom_sys.dll"
, но без файла precompile_execution_file это не будет стоить.
Примечание: sysimage_path = "custom_sys.so" в Linux и "custom_sys" .dylib "в macOS ...
Для файла precompile_execution_file я думал, что запуск теста для каждого пакета может сделать это, поэтому я сделал что-то вроде этого:
precompilation.jl
packages = [...]
@assert typeof(packages) == Vector{Symbol}
import Pkg
m = Module()
try Pkg.test.(Base.require.(m, packages)) catch ; end
Функция try предназначена для случаев, когда некоторые тесты выдают ошибку, и мы не хотим, чтобы она заканчивалась ошибкой.
Затем, выполнив следующее в оболочке, выдается
using PackageCompiler
packages = [...]
Pkg.add.(String.(packages))
Pkg.update()
Pkg.build.(String.(packages))
create_sysimage(packages; incremental = false,
sysimage_path = "custom_sys.dll",
precompile_execution_file = "precompilation.jl")
библиотека динамического изображения c sys, которая загружается без проблем. Когда я делал using Makie
, задержки не было, так что с этой частью все в порядке, но когда я делал некоторые заговоры с Мак ie, все равно была первая задержка графика, так что я предполагаю, что скрипт прекомпиляции не сделал то, что я думал будет делать.
Кроме того, при использовании табуляции для получения предложений в ответ, он будет зависать в первый раз, но я предполагаю, что это ожидаемый побочный эффект.