Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System image error requiring DataFrames from Gadfly on another machine #498

Closed
hugo-tam opened this issue Feb 17, 2021 · 2 comments
Closed

Comments

@hugo-tam
Copy link

System image compiled from a package that uses Gadfly.jl to plot a DataFrame object seems unable to be reused in another machine. While the image is fine to be used in the same machine (and the same user), if another machine loads the same image, there is an error:

┌ Warning: Error requiring `DataFrames` from `Gadfly`
│   exception =
│    could not open file C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\dataframes.jl
│    Stacktrace:
│     [1] include(::Function, ::Module, ::String) at .\Base.jl:380
│     [2] include at .\Base.jl:368 [inlined]
│     [3] include at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\Gadfly.jl:1 [inlined]
│     [4] link_dataframes() at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\mapping.jl:238
│     [5] top-level scope at none:1
│     [6] eval at .\boot.jl:331 [inlined]
│     [7] eval at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\Gadfly.jl:1 [inlined]
│     [8] (::Gadfly.var"#4#11")() at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:94
│     [9] err(::Any, ::Module, ::String) at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:42
│     [10] (::Gadfly.var"#3#10")() at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:93
│     [11] withpath(::Any, ::String) at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:32
│     [12] (::Gadfly.var"#2#9")() at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:92
│     [13] listenpkg(::Any, ::Base.PkgId) at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:15
│     [14] macro expansion at C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:90 [inlined]
│     [15] __init__() at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\Gadfly.jl:66
└ @ Requires C:\Users\CREATOR_ID\.julia\packages\Requires\035xH\src\require.jl:44
ERROR: LoadError: MethodError: no method matching evalmapping(::DataFrames.DataFrame, ::Symbol)
Closest candidates are:
  evalmapping(::Any, !Matched::AbstractArray) at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\mapping.jl:183
  evalmapping(::Any, !Matched::Function) at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\mapping.jl:184
  evalmapping(::Any, !Matched::Distributions.Distribution) at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\mapping.jl:185
  ...
Stacktrace:
 [1] _evalmapping!(::Dict{Symbol,Any}, ::DataFrames.DataFrame, ::Gadfly.Data) at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\mapping.jl:204
 [2] evalmapping!(::Dict{Symbol,Any}, ::DataFrames.DataFrame, ::Gadfly.Data) at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\mapping.jl:233
 [3] plot at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\Gadfly.jl:331 [inlined]
 [4] plot(::DataFrames.DataFrame, ::Type{Gadfly.Geom.PointGeometry}; mapping::Base.Iterators.Pairs{Symbol,Symbol,Tuple{Symbol,Symbol},NamedTuple{(:x, :y),Tuple{Symbol,Symbol}}}) at C:\Users\CREATOR_ID\.julia\packages\Gadfly\Xnkmc\src\Gadfly.jl:293
 [5] plot_dataframe at C:\Users\CREATOR_ID\.julia\packages\PackageCompilerDebug\vmtvg\src\PackageCompilerDebug.jl:6 [inlined]
 [6] plot_dataframe(::String, ::Array{Int64,1}, ::Array{Int64,1}) at C:\Users\CREATOR_ID\.julia\packages\PackageCompilerDebug\vmtvg\src\PackageCompilerDebug.jl:9
 [7] top-level scope at C:\Temp\TestPlot.jl:2
 [8] include(::Function, ::Module, ::String) at .\Base.jl:380
 [9] include(::Module, ::String) at .\Base.jl:368
 [10] exec_options(::Base.JLOptions) at .\client.jl:296
 [11] _start() at .\client.jl:506
in expression starting at C:\Temp\TestPlot.jl:2

It appears always looking for the dataframes.jl source code in the user profile directory of the image creator's machine (C:\Users\CREATOR_ID\... above).

I've recreated the issue with a bare minimum package that has only one function plot_dataframe. It specifies the version of Gadfly and DataFrames which I believe are the latest. The CreateSysimage.jl is the script I used to create a new environment, add the package as dependency, and ultimately create the system image. The precompile script can be used to test run the system image such as:

julia.exe --sysimage PackageCompilderDebug.so CreateSysimage_PrecompileExe.jl

I also tried removing DataFrames to just use Gadfly with non-DataFrame data. It actually worked - and can be found in a different branch of the same repository.

I wonder if this is an issue with PackageCompiler or Gadfly, and whether there is a way to work around it.

Finally, versioninfo() as follows:

Julia Version 1.5.2
Commit 539f3ce943 (2020-09-23 23:17 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, skylake)
Environment:
  JULIA_DEPOT_PATH = %USERPROFILE%\.julia;C:\JuliaPro-1.5.2-1\Julia-1.5.2\local\share\julia;C:\JuliaPro-1.5.2-1\Julia-1.5.2\share\julia  JULIA_EDITOR = "C:\JuliaPro-1.5.2-1\app-1.51.0\atom.exe"  -a
  JULIA_LOAD_PATH = @;@v#.#;@stdlib
  JULIA_NUM_THREADS = 4
  JULIA_PKG_SERVER = pkg.juliahub.com
  JULIA_SPECIALFUNCTIONS_BUILD_SOURCE = false
@KristofferC
Copy link
Member

Should be fixed by GiovineItalia/Gadfly.jl#1530.

@KristofferC
Copy link
Member

Please try again when that PR is merged and report back.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants