Reputation: 2859
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?
Upvotes: 2
Views: 3482
Reputation: 99317
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.
Upvotes: 0
Reputation: 5494
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.
Upvotes: 4
Reputation: 172209
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.
Upvotes: 4