2013-03-09 22 views
4

我在CentOS 5.8上執行Python 2.7.3的altinstall,並且我想分發給出pip和所有爵士樂。但是,我無法理解正確的過程,並且分發的安裝腳本給我帶來了錯誤。在執行Python的altinstall時安裝分發

命令的當前順序:(最終將被用於我的一個項目中的安裝腳本)

sudo yum groupinstall "Development tools" 
sudo yum install {zlib,bzip2,openssl,ncurses}-devel 

cd /tmp && mkdir python273 && cd python273 
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar -xf Python-2.7.3.tar.bz2 
cd Python-2.7.3 

./configure --prefix=/usr/local --enable-shared 
make 
sudo make altinstall # installs to /usr/local/{bin,lib} 

# Fix path to shared lib - http://stackoverflow.com/a/7880519/1076493 
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf > /dev/null 
sudo ldconfig 

# Distribute 
wget http://python-distribute.org/distribute_setup.py 
sudo python2.7 distribute_setup.py 

# Done, install whatever interesting packages I want + clean up 
sudo pip install virtualenv yolk bpython 
rm -rf /tmp/python273 

但是我得到試圖運行distribute_setup.py拒絕「權限」,甚至儘管它與sudo一起運行。在root shell中執行它時工作正常。我猜測這個腳本並不尊重最初在製作子過程時使用的UID。

這讓我感到驚訝;這是正確的順序進行Python(2.7.3)的altinstall與分佈?或者僅僅是分發安裝腳本不尊重給定的UID?如果腳本是問題,我將如何使用sudo來運行它,因爲我不希望我的設置需要root shell?

$ sudo python2.7 distribute_setup.py        
Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.35.tar.gz 
Extracting in /tmp/tmpE9UJke                
Now working in /tmp/tmpE9UJke/distribute-0.6.35           
Installing Distribute                 
Traceback (most recent call last):              
    File "distribute_setup.py", line 546, in <module>          
    sys.exit(main())                  
    File "distribute_setup.py", line 543, in main           
    return _install(tarball, _build_install_args(options))        
    File "distribute_setup.py", line 87, in _install          
    if not _python_cmd('setup.py', 'install', *install_args):       
    File "distribute_setup.py", line 37, in _python_cmd         
    return subprocess.call(args) == 0             
    File "/usr/local/lib/python2.7/subprocess.py", line 493, in call      
    return Popen(*popenargs, **kwargs).wait()           
    File "/usr/local/lib/python2.7/subprocess.py", line 679, in __init__     
    errread, errwrite)                 
    File "/usr/local/lib/python2.7/subprocess.py", line 1249, in _execute_child   
    raise child_exception                
OSError: [Errno 13] Permission denied 
+0

我剛剛下載了tarball手動instea d使用distribute_setup。然而,即使它起作用,它也不能回答我的問題。 – timss 2013-03-18 21:27:16

回答

8

我在這裏有上RHEL5.8一個非常類似的設置,我得到相同的權限被拒絕的異常當我執行:

$ sudo python2.7 distribute_setup.py 

的問題通過使用絕對路徑解決:

$ sudo /usr/local/bin/python2.7 distribute_setup.py 

根本問題是根帳戶在其PATH中沒有/ usr/local/bin。


事實上distribute_setup.py試圖通過重新使用與sys.executablesubprocess.call當前Python解釋器調用一個python子命令,如果你想這樣一步一步:

$ sudo python2.7 -c "import sys; print sys.executable" 

$ sudo /usr/local/bin/python2.7 -c "import sys; print sys.executable" 
/usr/local/bin/python2.7 

Permission denied錯誤是有點誤導,但它是由試圖執行一個空文件名引起的:

$ python2.7 -c "import subprocess; subprocess.call([''])" 
[...] 
OSError: [Errno 13] Permission denied 
+0

謝謝!一個相當難以捉摸的錯誤原因,但很容易理解你的解釋。 – timss 2013-05-02 00:45:59

相關問題