歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Python升級到2.7.11

Python升級到2.7.11

日期:2017/2/28 13:47:30   编辑:Linux教程

python升級到2.7.11可解決 內置的 socket庫的setdefaulttimeout方法和multiprocessing庫的manage隊列沖突的問題,在2.7.3版本是需要改源碼才能解決。python 2.7.11,下載鏈接點擊這裡。問題如下

Traceback (most recent call last):
File "/usr/local/lib/python2.7/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/local/lib/python2.7/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "agentInstaller.py", line 445, in getInstallInfo
lock.acquire()
File "/usr/local/lib/python2.7/multiprocessing/managers.py", line 960, in acquire
return self._callmethod('acquire', (blocking,))
File "/usr/local/lib/python2.7/multiprocessing/managers.py", line 729, in _callmethod
self._connect()
File "/usr/local/lib/python2.7/multiprocessing/managers.py", line 716, in _connect
conn = self._Client(self._token.address, authkey=self._authkey)
File "/usr/local/lib/python2.7/multiprocessing/connection.py", line 149, in Client
answer_challenge(c, authkey)
File "/usr/local/lib/python2.7/multiprocessing/connection.py", line 383, in answer_challenge
message = connection.recv_bytes(256) # reject large message
IOError: [Errno 11] Resource temporarily unavailable

解決問題可以修改源代碼文件 /usr/local/lib/python2.7/multiprocessing/connection.py

157 def Pipe(duplex=True):
158 '''
159 Returns pair of connection objects at either end of a pipe
160 '''
161 if duplex:
162 s1, s2 = socket.socketpair()
++163 s1.setblocking(True)
++164 s2.setblocking(True)
165 c1 = _multiprocessing.Connection(os.dup(s1.fileno()))
166 c2 = _multiprocessing.Connection(os.dup(s2.fileno()))
167 s1.close()
168 s2.close()
169 else:
170 fd1, fd2 = os.pipe()
171 c1 = _multiprocessing.Connection(fd1, writable=False)
172 c2 = _multiprocessing.Connection(fd2, readable=False)
173
174 return c1, c2

226 def __init__(self, address, family, backlog=1):
227 self._socket = socket.socket(getattr(socket, family))
228 self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
++229 self._socket.setblocking(True)
230 self._socket.bind(address)
231 self._socket.listen(backlog)
232 self._address = self._socket.getsockname()
233 self._family = family
234 self._last_accepted = None

243 def accept(self):
244 s, self._last_accepted = self._socket.accept()
++245 s.setblocking(True)
246 fd = duplicate(s.fileno())
247 conn = _multiprocessing.Connection(fd)
248 s.close()
249 return conn

257 def SocketClient(address):
258 '''
259 Return a connection object connected to the socket given by `address`
260 '''
261 family = address_type(address)
262 s = socket.socket( getattr(socket, family) )
++263 s.setblocking(True)
264 t = _init_timeout()

修改 /usr/local/lib/python2.7/test/test_multiprocessing.py

assert sio.getvalue() == 'foo'
2029
++2030 # Test interaction with socket timeouts - see Issue #6056
++ 2031 #
++ 2032
++ 2033 class TestTimeouts(unittest.TestCase):
++ 2034 @classmethod
++ 2035 def _test_timeout(cls, child, address):
++ 2036 time.sleep(1)
++ 2037 child.send(123)
++ 2038 child.close()
++ 2039 conn = multiprocessing.connection.Client(address)
++ 2040 conn.send(456)
++ 2041 conn.close()
++ 2042
++ 2043 def test_timeout(self):
++ 2044 old_timeout = socket.getdefaulttimeout()
++ 2045 try:
++ 2046 socket.setdefaulttimeout(0.1)
++ 2047 parent, child = multiprocessing.Pipe(duplex=True)
++ 2048 l = multiprocessing.connection.Listener(family='AF_INET')
++ 2049 p = multiprocessing.Process(target=self._test_timeout,
++ 2050 args=(child, l.address))
++ 2051 p.start()
++ 2052 child.close()
++ 2053 self.assertEqual(parent.recv(), 123)
++ 2054 parent.close()
++ 2055 conn = l.accept()
++ 2056 self.assertEqual(conn.recv(), 456)
++ 2057 conn.close()
++ 2058 l.close()
++ 2059 p.join(10)
++ 2060 finally:
++ 2061 socket.setdefaulttimeout(old_timeout)
++ 2062
++ 2063
++ 2064 testcases_other = [OtherTest, TestInvalidHandle, TestInitializers,
--2065 #- TestStdinBadfiledescriptor]
++ 2066 TestStdinBadfiledescriptor, TestTimeouts]

升級2.7.11的其他好處就去看官網描述吧。安裝過程如下:

curl -k https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz -o python-2.7.11.tgz

yum -y install gcc gcc-c++ autoconf

yum -y install ncurses ncurses-devel

yum -y install mysql-devel

tar xf Python-2.7.11.tgz
cd Python-2.7.11/
./configure
make -j4 && make install

升級完重新打開secureCRT窗口

[root@master ~]# python
Python 2.7.11 (default, Nov 4 2016, 14:13:05)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

安裝readline

yum -y install readline-devel
yum -y install patch
yum -y install gcc python-devel zlib-devel openssl-devel libffi-devel

easy_install readline

安裝MySQLdb

tar zxf MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3
python setup.py build
python setup.py install

如果出現下面問題

>>> import MySQLdb
/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-linux-x86_64.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /usr/local/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-linux-x86_64.egg/_mysql.pyc, but /home/opd/tmpFiles/singleExec/MySQL-python-1.2.3 is being added to sys.path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "MySQLdb/__init__.py", line 19, in <module>
import _mysql
File "build/bdist.linux-x86_64/egg/_mysql.py", line 7, in <module>
File "build/bdist.linux-x86_64/egg/_mysql.py", line 6, in __bootstrap__
ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory
>>>

解決方法如下

# 根據最後提示,應該是找不著一個交libmysqlclient.so.18的文件,於是到mysql安裝目錄裡找到這個文件並且做一個軟連接到/usr/lib
ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20
# 如果是64系統則:
ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20

零基礎如何入門Python http://www.linuxidc.com/Linux/2016-10/136485.htm

Ubuntu 14.04安裝Python 3.3.5 http://www.linuxidc.com/Linux/2014-05/101481.htm

CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

在CentOS 6.5上安裝Python2.7 http://www.linuxidc.com/Linux/2016-10/136206.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Copyright © Linux教程網 All Rights Reserved