On Fri, Oct 30, 2015 at 12:13 PM, Tom Breloff <[email protected]> wrote:
> In this case, Plots doesn't actually depend on Gadfly at all... it's an
> optional dependency.  (I only added it to the require to test what might
> happen)  However in the general case it's really tricky if the only "real"
> solution is "fix the package so the restriction isn't necessary".
>
> What if a user installs a package that requires an old version of StatsBase
> (say, before some change to the interface).  Then if the user has 10 other
> packages which all expect a more recent version of StatsBase, they will all
> break (or Pkg will generate an error if any of the version dependencies in
> REQUIRE were properly written).  The user may never use those packages in
> the same julia session, but because the package states are shared among all
> 0.4 versions of Julia (there's only one ~/.julia/v0.4 directory), he/she
> cannot keep that package installed.  There's got to be a better solution.

You can change this directory with environment variable

>
> Of course, a better error message would be helpful too.
>
> On Fri, Oct 30, 2015 at 11:50 AM, Yichao Yu <[email protected]> wrote:
>>
>> On Fri, Oct 30, 2015 at 11:30 AM, Tom Breloff <[email protected]> wrote:
>> > Ok, I tried that out, and you're right that I get an error (it didn't
>> > fallback to an older version, unless maybe that would happen with
>> > Pkg.update()?)
>> >
>> >
>> > julia> Pkg.resolve()
>> > ERROR: unsatisfiable package requirements detected: no feasible version
>> > could be found for package: Gadfly
>> >  in error at ./error.jl:21
>> >  in resolve at ./pkg/resolve.jl:37
>> >  in resolve at ./pkg/entry.jl:422
>> >  in resolve at pkg/entry.jl:404
>> >  in anonymous at pkg/dir.jl:31
>> >  in cd at file.jl:22
>> >  in cd at pkg/dir.jl:31
>> >  in resolve at pkg.jl:46
>> >
>> > julia>
>> > [tom@tomoffice Plots]$ cat REQUIRE
>> > julia 0.3
>> >
>> > Colors
>> > Reexport
>> > Compat
>> > Gadfly 0.3.18
>> >
>> > How should I go about rectifying this error?  In this case I know that
>> > the
>> > requirement clash is with Immerse (which has "Gadfly 0.3.16 0.3.17" in
>> > its
>> > require file), but if a user sees this error they would likely be lost.
>> > I
>> > fear that there's not a good solution once a single package has special
>> > requirements.
>> >
>>
>> We could probably print out the actual conflicting requirements and
>> where they are coming from. This should help the user to know where to
>> look (or which package to blame)
>>
>> IMHO, for this particular conflict, the best solution would be to fix
>> Immerse to work with newer version of Gadfly. Or if you need it now,
>> maybe try to pin Plots down to an earlier version that doesn't require
>> Gadfly 0.3.18 (if it has one of course).
>>
>> >
>> > On Friday, October 30, 2015 at 11:15:52 AM UTC-4, Yichao Yu wrote:
>> >>
>> >> On Fri, Oct 30, 2015 at 11:14 AM, Yichao Yu <[email protected]> wrote:
>> >> > On Fri, Oct 30, 2015 at 11:05 AM, Tom Breloff <[email protected]>
>> >> > wrote:
>> >> >> Thanks... after reading through that again, let me adjust my
>> >> >> scenario:
>> >> >>
>> >> >> Package A's require:
>> >> >>
>> >> >> julia 0.4
>> >> >> C 0.1 0.2-
>> >> >>
>> >> >> Package B's require:
>> >> >>
>> >> >> julia 0.4
>> >> >> C 0.3
>> >> >>
>> >> >> What version of C is installed?  Package A want any version 0.1.x,
>> >> >> Package B
>> >> >> wants any version 0.3.x or greater.  Who "wins"?
>> >>
>> >> Or fallback to an older version of one of them that don't conflict.
>> >>
>> >> >
>> >> > I'd be surprised if you don't get an error.
>> >> >
>> >> >>
>> >> >> On Fri, Oct 30, 2015 at 10:28 AM, Yichao Yu <[email protected]>
>> >> >> wrote:
>> >> >>>
>> >> >>> On Fri, Oct 30, 2015 at 10:18 AM, Tom Breloff <[email protected]>
>> >> >>> wrote:
>> >> >>> > I'm very confused about how Pkg resolution works in 0.4, and I
>> >> >>> > couldn't
>> >> >>> > find
>> >> >>> > a definitive source of details.  If package A has the REQUIRE
>> >> >>> > file:
>> >> >>> >
>> >> >>> > julia 0.4
>> >> >>> > C 0.1
>> >> >>> >
>> >> >>>
>> >> >>> This means version 0.1 or higher for C
>> >> >>>
>> >> >>> >
>> >> >>> > and package B has the REQUIRE file:
>> >> >>> >
>> >> >>> > julia 0.4
>> >> >>> > C 0.2
>> >> >>> >
>> >> >>>
>> >> >>> This means version 0.2 or higher for C
>> >> >>>
>> >> >>> >
>> >> >>> > which version of C is installed?  Does it change if you do a
>> >> >>> > Pkg.add("C")?
>> >> >>> > What determines which package "wins"?
>> >> >>>
>> >> >>> The latest available that is compatible with everything else.
>> >> >>>
>> >> >>> Note to specify the upper bound, use `C lower_version
>> >> >>> upper_version`
>> >> >>>
>> >> >>> >
>> >> >>> > Bonus question: can someone point me to documentation on exactly
>> >> >>> > what
>> >> >>> > the
>> >> >>> > plus/minus mean?  What's the difference between `0.1`, `0.1-`,
>> >> >>> > and
>> >> >>> > `0.1+`?
>> >> >>>
>> >> >>> - and + are for prerelease and build
>> >> >>>
>> >> >>> ```
>> >> >>> julia> v"0.1-2+3".prerelease
>> >> >>> (2,)
>> >> >>>
>> >> >>> julia> v"0.1-2+3".build
>> >> >>> (3,)
>> >> >>> ```
>> >> >>>
>> >> >>> >
>> >> >>> > Bonus question: how does the logic change with the new package
>> >> >>> > manager?
>> >> >>> > (if
>> >> >>> > at all)
>> >> >>>
>> >> >>> nothing
>> >> >>>
>> >> >>> >
>> >> >>> > Bonus question: is there an open issue/PR that discusses
>> >> >>> > potential
>> >> >>> > future
>> >> >>> > changes to METADATA and package management?
>> >> >>> >
>> >> >>> > Thanks!
>> >> >>>
>> >> >>> Ref
>> >> >>>
>> >> >>>
>> >> >>> http://julia.readthedocs.org/en/latest/manual/packages/#require-speaks-for-itself
>> >> >>
>> >> >>
>
>

Reply via email to