2010-02-17 34 views
5

Tôi cần chạy một số mã trên máy Linux có Python 2.3.4 được cài đặt trước. Tôi không nằm trong danh sách sudoers cho máy đó, vì vậy tôi đã xây dựng Python 2.6.4 vào thư mục gốc của tôi. Sau đó, tôi cố gắng sử dụng virtualenv (lần đầu tiên), nhưng có:Làm cách nào để khắc phục sự cố này khi tạo môi trường virtualenv bằng Python tùy chỉnh-xây dựng?

$ Python-2.6.4/python virtualenv/virtualenv.py ENV 
New python executable in ENV/bin/python 
Could not find platform dependent libraries <exec_prefix> 
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 
Installing setuptools......... 
Complete output from command /apps/users/dspitzer/ENV/bin/python -c "#!python 
\"\"\"Bootstrap setuptoo... 

" /apps/users/dspitzer/virtualen...6.egg: 
Could not find platform dependent libraries <exec_prefix> 
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 
'import site' failed; use -v for traceback 
Traceback (most recent call last): 
File "<string>", line 67, in <module> 
ImportError: No module named md5 
---------------------------------------- 
...Installing setuptools...done. 
Traceback (most recent call last): 
File "virtualenv/virtualenv.py", line 1488, in <module> 
    main() 
File "virtualenv/virtualenv.py", line 529, in main 
    use_distribute=options.use_distribute) 
File "virtualenv/virtualenv.py", line 619, in create_environment 
    install_setuptools(py_executable, unzip=unzip_setuptools) 
File "virtualenv/virtualenv.py", line 361, in install_setuptools 
    _install_req(py_executable, unzip) 
File "virtualenv/virtualenv.py", line 337, in _install_req 
    cwd=cwd) 
File "virtualenv/virtualenv.py", line 590, in call_subprocess 
    % (cmd_desc, proc.returncode)) 
OSError: Command /apps/users/dspitzer/ENV/bin/python -c "#!python 
\"\"\"Bootstrap setuptoo... 

" /apps/users/dspitzer/virtualen...6.egg failed with error code 1 

Tôi có nên được thiết lập PYTHONHOME một số giá trị? (Tôi cố tình đặt tên ENV tôi "ENV" vì thiếu một cái tên hay hơn.)

Không biết nếu tôi có thể bỏ qua những sai sót, tôi đã cố gắng cài đặt mũi (0.11.1) vào ENV tôi:

$ cd nose-0.11.1/ 
$ ls 
AUTHORS doc/    lgpl.txt  nose.egg-info/ selftest.py* 
bin/  examples/   MANIFEST.in nosetests.1  setup.cfg 
build/  functional_tests/ NEWS   PKG-INFO  setup.py 
CHANGELOG install-rpm.sh* nose/  README.txt  unit_tests/ 
$ ~/ENV/bin/python setup.py install 
Could not find platform dependent libraries <exec_prefix> 
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] 
Traceback (most recent call last): 
File "setup.py", line 1, in <module> 
    from nose import __version__ as VERSION 
File "/apps/users/dspitzer/nose-0.11.1/nose/__init__.py", line 1, in <module> 
    from nose.core import collector, main, run, run_exit, runmodule 
File "/apps/users/dspitzer/nose-0.11.1/nose/core.py", line 3, in <module> 
    from __future__ import generators 
ImportError: No module named __future__ 

Bạn có lời khuyên nào không?

+0

Tôi đã đăng bài này trên ServerFault: http://serverfault.com/questions/113656/, nhưng tôi thấy có nhiều câu hỏi ảo hơn ở đây, vì vậy tôi quyết định cũng đăng ở đây. –

Trả lời

7

Bạn đã thực sự chạy "cài đặt" trên bản dựng python tùy chỉnh của mình chưa? Thông thường, bạn sẽ muốn làm một cái gì đó giống như

./configure --prefix=/path/to/installdir (other options) 
make 
make install 

Note Prefix thể được bất kỳ thư mục mà bạn có đầy đủ ghi-quyền, ví dụ tôi rất thường xuyên sử dụng $ HOME/ứng dụng trên chia sẻ lưu trữ môi trường.

Sau đó chạy/path/to/installdir/bin/python, không phải thư mục xây dựng của bạn. Điều này sẽ tạo ra các biến chính xác, và sau đó bạn có thể cài đặt virtualenv. Có thể là tốt nhất để cài đặt virtualenv sử dụng setup.py của nó:

cd virtualenv_source_dir 
/path/to/installdir/bin/python setup.py install 

này có thể yêu cầu cài đặt setuptools đầu tiên, sử dụng cùng một phương pháp.

Rồi cuối cùng:

# Just to be safe 
export PATH="/path/to/installdir/bin:$PATH" 

virtualenv ~/ENV 
~/ENV/bin/pip install somepackage # (and such) 
2

Ngoài đề nghị của đảm bảo rằng bạn thực sự cài đặt tùy chỉnh của bạn biên soạn Python Crast, bạn cũng nên kiểm tra xem các tùy chỉnh Python thực sự có thể tìm thấy các thư viện của mình. Đây là gợi ý bạn nhận được với thông báo về PYTHONHOME. Lỗi nhập đề xuất bạn cần đặt trong số .bashrc hoặc cấu hình vỏ thích hợp export PYTHONHOME=/path/to/python_installation.

Ngoài ra, khi bạn đang cố gắng để nói với virtualenv để sử dụng một phiên bản không-mặc định của python, bạn cần phải sử dụng -p,--python cờ, ví dụ,

virtualenv --python=/path/to/python_installation/bin/python myenv 

Xem thêm các câu hỏi liên quan, "Use different Python version with virtualenv".

+1

Nếu python là 'make install''ed đúng, bạn không cần thiết lập môi trường PYTHONHOME var. Điều này chủ yếu được sử dụng để sử dụng một nhị phân đơn với một đường dẫn stdlib hoàn toàn khác nhau. Thông thường, giá trị này được tự động xác định từ tiền tố cài đặt được biên dịch vào trình thông dịch python của bạn. Điều này cũng có thể gây nhầm lẫn virtualenv, có khả năng điều khiển PYTHONHOME hoặc tương đương trong trình thông dịch. – Crast

1

Tôi đã gặp lỗi tương tự khi cố gắng cài đặt trên thư mục hiện có đã có easy_install trong lib/python2.6. Tôi đã phải đặt một liên kết từ lib64/python2.6 đến lib/python2.6.

Tôi không nói rằng bản sửa lỗi của tôi là bản sửa lỗi phù hợp, thay vào đó, tôi đang trỏ đến một lý do khác khiến bạn có thể gặp lỗi này.

0

Bây giờ bạn có thể dễ dàng cài đặt Python như một người sử dụng unpriviledged sử dụng Anaconda: http://continuum.io/downloads

Nó tương tự như câu hỏi này.Một khi các câu trả lời chi tiết làm cho một môi trường mới, vì vậy bạn không cần phải sử dụng virtual-env và tránh các gotchas không thường xuyên: Installing Anaconda into a Virtual Environment.

conda create -n myenv1 ipython scipy

0

tôi không có đủ đại diện để thêm video này như một bình luận trên @ câu trả lời Crast và câu hỏi này là 4 tuổi, nhưng điều này có thể có ích cho một ai đó. Trong Windows, bạn phải ra đường dẫn đến python.exe, nhưng có vẻ như trong Linux/OS X bạn chỉ cần dẫn đến thư mục. Ví dụ:

Windows:

virtualenv -p <PATH TO YOUR DESIRED PYTHON.EXE> venv 

Tạo một môi trường ảo trong thư mục con "venv" trong thư mục hiện hành.

+0

Trên thực tế Linux giống nhau trong trường hợp này. Cả hai đều mong đợi python thực thi được. Trong các tập tin thực thi Linux không bắt buộc phải kết thúc bằng .exe –

Các vấn đề liên quan