views:

568

answers:

3

I need to get Python code, which relies on Python 2.6, running on a machine with only Python 2.3 (I have no root access).

This is a typical scenario for virtualenv. The only problem is that I cannot convince it to copy all libraries to the new environment as well.

virtualenv --no-site-packages my_py26

does not do what I need. The library files are still only links to the /usr/lib/python2.6 directory.

No I'm wondering, whether virtualenv is the right solution for this scenario at all. From what I understand it is only targetted to run on machines with exactly the same Python version. Tools like cx_Freeze and the like do not work for me, as I start the Python file after some environment variable tweeking.

Is there maybe a hidden virtualenv option that copies all the Python library files into the new environment? Or some other tool that can help here?

+2  A: 

No, I think you completely misunderstood what virtualenv does. Virtualenv is to create a new environment on the same machine that is isolated from the main environment. In such an environment you can install packages that do not get installed in the main environment, and with --no-site-packages you can also isolate you from the main environments installed modules.

If you need to run a program that requires Python 2.6 on a machine that does not have 2.6, you need to install Python 2.6 on that machine.

Lennart Regebro
Not quite, Lennart - tools like PyInstaller can install 2.6-dependent Python programs on machines with older Python versions or no Python at all.
Vinay Sajip
Well... that's because it includes Python. :) But you are right, that is an option here, especially is the target machine doesn't have a compiler, so he can't install Python.
Lennart Regebro
This is a good answer because as Lennart points out, the user does not understand the purpose of virtualenv.
jkp
+2  A: 

I can't help you with your virtualenv problem as I have never used it. But I will just point something out for future use.

You can install software from sources into your home folder and run them without root access. for example to install python 2.6:

~/src/Python-2.6.2 $ ./configure --prefix=$HOME/local
~/src/Python-2.6.2 $ make
 ...
~/src/Python-2.6.2 $ make install
 ...
export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH

~/src/Python-2.6.2 $ which python
/home/name/local/bin/python

This is what I have used at Uni to install software where I don't have root access.

kjfletch
A: 

You haven't clearly explained why cx_Freeze and the like wouldn't work for you. The normal approach to distributing Python applications to machines which have an older version of Python, or even no Python at all, is a tool like PyInstaller (in the same class of tools as cx_Freeze). PyInstaller makes copies of all your dependencies and allows you to create a single executable file which contains all your Python dependencies.

You mention tweaking environment variables as a reason why you can't use such tools; if you expand on exactly why this is, you may be able to get a more helpful answer.

Vinay Sajip