Re: [openstack-dev] [requirements] dependencies problem on different release

2015-08-26 Thread Robert Collins
On 27 August 2015 at 02:00, Gareth academicgar...@gmail.com wrote:
 Hey guys,

 I have a question about dependencies. There is an example:

 On 2014.1, project A is released with its dependency in requirements.txt
 which contains:

 foo=1.5.0
 bar=2.0.0,2.2.0

 and half a year later, the requirements.txt changes to:

 foo=1.7.0
 bar=2.1.0,2.2.0

 It looks fine, but potential change would be upstream version of package foo
 and bar become 2.0.0 and 3.0.0 (major version upgrade means there are
 incompatible changes).

 For bar, there will be no problems, because 2.2.0 limit the version from
 major version changes. But with 2.0.0 foo, it will break the installation of
 2014.1 A, because current development can't predict every incompatible
 changes in the future.

Correct. But actually bar is a real problem for single-instance binary
distributors - like Debian family distributions - where only one
version of bar can be in the archive at once. For those distributions,
when bar 3 comes out, they cannot add it to the archive until a new
release of project A happens (or they break project A). They also
can't add anything to the archive that depends on bar  2.2.0, because
they can't add bar. So it leads to gridlock. We are now avoiding
adding and won't except in exceptional circumstances, such defensive
upper bounds to OpenStack's requirements. When we /know/ that the
thing is broken we may - if we can't get it fixed.

 A real example is to enable Rally for OpenStack Juno. Rally doesn't support
 old release officially but I could checkout its codes to the Juno release
 date which make both codes match. However even if I use the old
 requirements.txt to install dependencies, there must be many packages are
 installed as upstream versions and some of them breaks. An ugly way is to
 copy pip list from old Juno environment and install those properly. I hope
 there are better ways to do this work. Anyone has smart ideas?

As Boris says, use virtualenvs. They'll solve 90% of the pain.

-Rob


-- 
Robert Collins rbtcoll...@hp.com
Distinguished Technologist
HP Converged Cloud

__
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [requirements] dependencies problem on different release

2015-08-26 Thread Boris Pavlovic
Gareth,


A real example is to enable Rally for OpenStack Juno. Rally doesn't support
 old release officially but I could checkout its codes to the Juno release date
 which make both codes match. However even if I use the old requirements.txt
 to install dependencies, there must be many packages are installed as
 upstream versions and some of them breaks. An ugly way is to copy pip list
 from old Juno environment and install those properly. I hope there are
 better ways to do this work. Anyone has smart ideas?


Install everything in virtualenv (or at least Rally)

Best regards,
Boris Pavlovic

On Wed, Aug 26, 2015 at 7:00 AM, Gareth academicgar...@gmail.com wrote:

 Hey guys,

 I have a question about dependencies. There is an example:

 On 2014.1, project A is released with its dependency in requirements.txt
 which contains:

 foo=1.5.0
 bar=2.0.0,2.2.0

 and half a year later, the requirements.txt changes to:

 foo=1.7.0
 bar=2.1.0,2.2.0

 It looks fine, but potential change would be upstream version of package
 foo and bar become 2.0.0 and 3.0.0 (major version upgrade means there are
 incompatible changes).

 For bar, there will be no problems, because 2.2.0 limit the version
 from major version changes. But with 2.0.0 foo, it will break the
 installation of 2014.1 A, because current development can't predict every
 incompatible changes in the future.

 A real example is to enable Rally for OpenStack Juno. Rally doesn't
 support old release officially but I could checkout its codes to the Juno
 release date which make both codes match. However even if I use the old
 requirements.txt to install dependencies, there must be many packages are
 installed as upstream versions and some of them breaks. An ugly way is to
 copy pip list from old Juno environment and install those properly. I hope
 there are better ways to do this work. Anyone has smart ideas?

 --
 Gareth

 *Cloud Computing, OpenStack, Distributed Storage, Fitness, Basketball*
 *OpenStack contributor, kun_huang@freenode*
 *My promise: if you find any spelling or grammar mistakes in my email from
 Mar 1 2013, notify me *
 *and I'll donate $1 or ¥1 to an open organization you specify.*

 __
 OpenStack Development Mailing List (not for usage questions)
 Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


__
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


[openstack-dev] [requirements] dependencies problem on different release

2015-08-26 Thread Gareth
Hey guys,

I have a question about dependencies. There is an example:

On 2014.1, project A is released with its dependency in requirements.txt
which contains:

foo=1.5.0
bar=2.0.0,2.2.0

and half a year later, the requirements.txt changes to:

foo=1.7.0
bar=2.1.0,2.2.0

It looks fine, but potential change would be upstream version of package
foo and bar become 2.0.0 and 3.0.0 (major version upgrade means there are
incompatible changes).

For bar, there will be no problems, because 2.2.0 limit the version from
major version changes. But with 2.0.0 foo, it will break the installation
of 2014.1 A, because current development can't predict every incompatible
changes in the future.

A real example is to enable Rally for OpenStack Juno. Rally doesn't support
old release officially but I could checkout its codes to the Juno release
date which make both codes match. However even if I use the old
requirements.txt to install dependencies, there must be many packages are
installed as upstream versions and some of them breaks. An ugly way is to
copy pip list from old Juno environment and install those properly. I hope
there are better ways to do this work. Anyone has smart ideas?

-- 
Gareth

*Cloud Computing, OpenStack, Distributed Storage, Fitness, Basketball*
*OpenStack contributor, kun_huang@freenode*
*My promise: if you find any spelling or grammar mistakes in my email from
Mar 1 2013, notify me *
*and I'll donate $1 or ¥1 to an open organization you specify.*
__
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [requirements] dependencies problem on different release

2015-08-26 Thread Gareth
Btw, it's not a dependency conflict issue. If we install python
dependencies via pip, it's okay to be with foo=1.5.0 in the past, but not
now maybe (oslo.util - oslo_util breaks nearly everything). Maybe we need
a requirements.txt as release like:

foo==1.5.0
bar==2.1.0

not

for=1.5.0
bar=2.0.0

On Thu, Aug 27, 2015 at 3:32 AM, Robert Collins robe...@robertcollins.net
wrote:

 On 27 August 2015 at 02:00, Gareth academicgar...@gmail.com wrote:
  Hey guys,
 
  I have a question about dependencies. There is an example:
 
  On 2014.1, project A is released with its dependency in requirements.txt
  which contains:
 
  foo=1.5.0
  bar=2.0.0,2.2.0
 
  and half a year later, the requirements.txt changes to:
 
  foo=1.7.0
  bar=2.1.0,2.2.0
 
  It looks fine, but potential change would be upstream version of package
 foo
  and bar become 2.0.0 and 3.0.0 (major version upgrade means there are
  incompatible changes).
 
  For bar, there will be no problems, because 2.2.0 limit the version
 from
  major version changes. But with 2.0.0 foo, it will break the
 installation of
  2014.1 A, because current development can't predict every incompatible
  changes in the future.

 Correct. But actually bar is a real problem for single-instance binary
 distributors - like Debian family distributions - where only one
 version of bar can be in the archive at once. For those distributions,
 when bar 3 comes out, they cannot add it to the archive until a new
 release of project A happens (or they break project A). They also
 can't add anything to the archive that depends on bar  2.2.0, because
 they can't add bar. So it leads to gridlock. We are now avoiding
 adding and won't except in exceptional circumstances, such defensive
 upper bounds to OpenStack's requirements. When we /know/ that the
 thing is broken we may - if we can't get it fixed.

  A real example is to enable Rally for OpenStack Juno. Rally doesn't
 support
  old release officially but I could checkout its codes to the Juno release
  date which make both codes match. However even if I use the old
  requirements.txt to install dependencies, there must be many packages are
  installed as upstream versions and some of them breaks. An ugly way is to
  copy pip list from old Juno environment and install those properly. I
 hope
  there are better ways to do this work. Anyone has smart ideas?

 As Boris says, use virtualenvs. They'll solve 90% of the pain.

 -Rob


 --
 Robert Collins rbtcoll...@hp.com
 Distinguished Technologist
 HP Converged Cloud

 __
 OpenStack Development Mailing List (not for usage questions)
 Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




-- 
Gareth

*Cloud Computing, OpenStack, Distributed Storage, Fitness, Basketball*
*OpenStack contributor, kun_huang@freenode*
*My promise: if you find any spelling or grammar mistakes in my email from
Mar 1 2013, notify me *
*and I'll donate $1 or ¥1 to an open organization you specify.*
__
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev