5

I am using many python packages like numpy, bottleneck, h5py, ... for my daily work on my computer. Since I am root on this machine it is no problem to install these packages. However I would like to use my "environment" of different packages also on a server machine where I only have a normal user account. So I thought about creating a virtual environment (with virtualenv) on my machine by installing all needed packages in there. Then I just copy the whole folder to the server and can run everything from it?

My machine uses Fedora 19 whereas the server uses Ubuntu. Is this a problem? I could not find any information on how to move such a virtual environment to another system. The reason I would like to create the virtual environment on my machine first is that there are a lot of tools missing on the server like python-dev, so I can't compile numpy for instance.

I looked into Anaconda and Enthought Python distributions, but they don't include a couple of packages I need. Also, there should be a completely "open" way for this problem?

Moving the virtual environment to the server failed, since it is complaining about some missing files when I import the packages. This is not surprising probably...

HyperCube
  • 3,870
  • 9
  • 41
  • 53
  • 1
    The answers there probably aren't too useful to you as you can't compile numpy on the target machine, but [moving a virtualenv is virtually impossible](http://stackoverflow.com/q/17554093/395760). –  Jul 11 '13 at 10:34
  • Well, thank you for this informative link. I guess this is really not possible. – HyperCube Jul 11 '13 at 12:09
  • if python dev headers are missing and you cannot have them installed system-wide (server admin?), what you can do is to compile your own python (which isn't *that* hard), then compile numpy etc. Virualenv allows you to specify the python binary to use. – ev-br Jul 11 '13 at 13:07

2 Answers2

12

You shouldn't move your virtualenv since it is essentially linked to your system python and the binary won't work on other machines.

However... you can export a list of installed packages and install them in another virtualenv through a requirements.txt file.

Basically, what I usually do with most of my projects:

# Generate a requirements file:
pip freeze > requirements.txt

On the new machine:

# This uses virtualenvwrapper, but you can do it without as well
mkproject my_project_name
git clone git://..../ .
pip install -r requirements.txt
Wolph
  • 78,177
  • 11
  • 137
  • 148
  • Wondering if I package python as well along with Virtual Env, if it is portable within Windows? – Manish Oct 15 '19 at 07:40
  • It might be, but there are better solutions for windows which are guaranteed to work. https://stackoverflow.com/q/12059509/54017 – Wolph Oct 15 '19 at 11:10
2

Having manually compiled VTK and PySide2 for Python36, I have also found myself bending the virtualenv rules.

Just today, I transferred my virtualenv to another system, and to make things easier, I gave it the exact same path that it had on the previous system. However, I did not have the same path for Python on my new system. Fortunately I was able to change the location that the virtualenv was looking for by altering a 'orig-prefix.txt' file located in [VIRTUALENV]/Lib.

The base Python path a virtualenv requires is stored in: [VIRTUALENV]/Lib/orig-prefix.txt

If I recall correctly, the path of the virtualenv itself is embedded in multiple files. Thus, in a case where I needed to relocate the virtualenv to a different path, I just recreated it and copied over everything except for the [VIRTUALENV]/Scripts directory.

This is probably not the way virtualenv is meant to be used, but it does provide a work-around. Also, note that I am doing this in a Windows environment.