[Openstack-operators] Packaging Virtualenvs
Xav Paice
xavpaice at gmail.com
Thu Jun 23 23:50:12 UTC 2016
Can I suggest that using the tool https://github.com/openstack/giftwrap
might make live a bunch easier?
I went down a similar path with building Debs in a venv using
dh_virtualenv, with some good success when I sorted the shebang. I later
found that the debs produced by Giftwrap are not only very easy to build
and test, but also take a bunch less effort to maintain and create new
packages for new things. To run the resulting code, I just symlink the
${venv}/bin/$binary to /usr/local/bin and run the thing using very
similar init scripts to the ones supplied by the distro packages. Works
like a charm, because the shebang in the binary points at the venv, not
the system python.
I do, however, package the init scripts, sample configs, etc in a
separate .deb, which is really very quick and easy and allows me to
control the bits I want to, and let Giftwrap take care of the OpenStack
code repos.
On Thu, 2016-06-23 at 23:40 +0000, Matt Joyce wrote:
> I want the script to dynamically instantiate the venv is call activate
> this at execution time and deactivate when done.
>
>
>
> On June 23, 2016 5:12:07 PM EDT, Doug Hellmann <doug at doughellmann.com>
> wrote:
> Excerpts from Silence Dogood's message of 2016-06-23 15:45:34 -0400:
> I know from conversations that a few folks package their python apps as
> distributable virtualenvs. spotify created dh-virtualenv for this. you
> can do it pretty simply by hand.
>
> I built a toolchain for building rpms as distributable virtualenvs and that
> works really well.
>
> What I'd like to do is make it so that every app that's built as a
> virtualenv gets setup to automatically execute at call time in their
> virtualenv.
>
> I see two options:
>
> 1) Dynamically generate a wrapper script during build and put it in the
> RPM. Call the wrapper.
>
> 2) Created a dependency global module ( as an rpm ) set it as a
> dependency. And basically it'd be an autoexecuting import that
>
> instantiates the virtualenv. it would probably know all it needs to
> because I am building all my packages to an internal standard. Then when
> building the APP rpm all I need to do is inject an import into the import
> chain if it's being built as a virtualenv. Then I have what are
> effectively statically compiled python apps.
>
> I like 2. But 1 isn't very bad. Both are a little hokey.
>
> Was curious if folks might have a preference, or a better idea.
>
> Thanks.
>
> Matt
>
> I'm not sure what you mean by a "wrapper script". If you run the
> Python console script from within the virtualenv you've packaged,
> you shouldn't need to do anything to "activate" that environment
> separately because it should have the correct shebang line.
>
> Are you seeing different behavior?
>
> Doug
>
>
> ______________________________________________________________
>
> OpenStack-operators mailing list
> OpenStack-operators at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators
>
> _______________________________________________
> OpenStack-operators mailing list
> OpenStack-operators at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators
More information about the OpenStack-operators
mailing list