(原)ubuntu中安裝tensorflow


轉載請注明出處:

http://www.cnblogs.com/darkknightzh/p/6592052.html

參考網址:

https://www.tensorflow.org/install/install_linux#InstallingAnaconda(需跨越絕境長城)

http://mbless.de/blog/2016/01/09/upgrade-to-python-2711-on-ubuntu-1404-lts.html

http://stackoverflow.com/questions/32856389/how-to-import-ssl-in-python-2-7-6

https://blog.liyang.io/301.html

http://stackoverflow.com/questions/8565695/error-compiling-gcc-4-6-2-under-ubuntu-11-10

http://stackoverflow.com/questions/33622842/error-in-python-after-import-tensorflow-typeerror-init-got-an-unexpect

http://stackoverflow.com/questions/35896335/how-can-i-uninstall-protobuf-3-0-0

https://github.com/tensorflow/tensorflow/issues/11

說明:本文不涉及手動編譯tensorflow

注:ubuntu中使用conda安裝tensorflow-gpu,網址:

https://www.cnblogs.com/darkknightzh/p/9834567.html

更新python

說明:python版本最好高一些,這邊再ubuntu16.04上面直接安裝成功,python版本為2.7.12;在ubuntu14.04上面安裝失敗,python版本為2.7.6,會提示snimissingwarning

更新python版本:http://mbless.de/blog/2016/01/09/upgrade-to-python-2711-on-ubuntu-1404-lts.html

wget  https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
tar xfz Python-2.7.13.tgz
cd Python-2.7.13/
./configure --prefix /usr/local/lib/python2.7.13
make
sudo make install

說明:1. 默認的話,python是不支持ssl的,http://stackoverflow.com/questions/32856389/how-to-import-ssl-in-python-2-7-6林家訪指出,修改Modules/Setup.dist文件(針對2.7.13,取消注釋214218,219220221行),則可以正常的sudo pip install了。

2. 由於沒有建立鏈接,此時系統默認的python版本還是原來的。建立鏈接(http://www.jb51.net/article/94266.htm):

sudo mv /usr/bin/python /usr/bin/python2.7.6
sudo ln -fs /usr/local/lib/python2.7.13/bin/python /usr/bin/python

如需將python改回默認的2.7.6,終端中輸入:

sudo mv /usr/bin/python2.7.6 /usr/bin/python)

之后在終端中輸入sudo python --version,便是2.7.13了。

3. 更新python后,由於所有的模塊均需要重新安裝(略蛋疼,因而最好還是直接使用anaconda之類的吧。不用自己安裝很多庫。。。),因而首先安裝pip。官網說python2.7.9以上的默認安裝了pip,但是使用pip時,死活提示No module named pip。。。

按照http://www.cnblogs.com/haython/p/3970426.html中的步驟,終於成功安裝pip

a 安裝easy_installhttps://pypi.python.org/pypi/ez_setup,解壓、sudo python ez_setup.py

b 安裝piphttps://pypi.python.org/pypi/pip,解壓、sudo python setup.py install

上面這些是在ubuntu14.04里面遇到的,ubuntu16直接用第二步就行了。。。

安裝tensorflow

https://www.tensorflow.org/install/install_linux

a. 如果有的話,卸載tensorflow:

pip uninstall tensorflow_gpu-1.0.1-cp27-none-linux_x86_64.whl

或者:

pip uninstall tensorflow_gpu

或者加上sudo

b. cuda版本為8.0(否則可能會提示找不到什么庫,記不清了)

 

1. 更新pip(pip版本比較舊時最好更新) 

pip install --upgrade pip

2. 安裝wheel(已經安裝的略過) 

pip install wheel

3. 安裝tensorflow 

sudo pip install tensorflow-gpu

說明:a. 這條命令會先下載gpu版本的tensorflow,而后再安裝。也可以直接下載(如tensorflow_gpu-1.0.1-cp27-none-linux_x86_64.whl),而后在該文件位置打開終端,直接輸入

sudo pip install tensorflow_gpu-1.0.1-cp27-none-linux_x86_64.whl

b. 如果安裝到系統目錄,需要使用sudo;如果安裝到anaconda之類的目錄,不需要使用sudo。

4. 測試:終端中輸入python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)
42

 可以正常使用了

可能遇到的問題

1. 如果直接在python中安裝,提示找不到glibc_2.23

https://blog.liyang.io/301.html中指出,先下載glibc_2.23,然后編譯。

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
tar -zxvf glibc-2.14.tar.gz && cd glibc-2.14 && mkdir build && cd build
../configure --prefix=/opt/glibc-2.14
make -j4
make install
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

若編譯的時候提示:

ld_library_path shouldn't contain the current directory when building glibc

http://stackoverflow.com/questions/8565695/error-compiling-gcc-4-6-2-under-ubuntu-11-10hmb指出,

unset LIBRARY_PATH; ./configure

而后可以編譯成功。

2. 第一次import tensorflow as tf,若提示下面的錯誤:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/xxx/anaconda2/lib/python2.7/site-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/home/xxx/anaconda2/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 54, in <module>
    from tensorflow.core.framework.graph_pb2 import *
  File "/home/ xxx /anaconda2/lib/python2.7/site-packages/tensorflow/core/framework/graph_pb2.py", line 16, in <module>
    from tensorflow.core.framework import node_def_pb2 as tensorflow_dot_core_dot_framework_dot_node__def__pb2
  File "/home/ xxx /anaconda2/lib/python2.7/site-packages/tensorflow/core/framework/node_def_pb2.py", line 16, in <module>
    from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2
  File "/home/ xxx /anaconda2/lib/python2.7/site-packages/tensorflow/core/framework/attr_value_pb2.py", line 16, in <module>
    from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2
  File "/home/ xxx /anaconda2/lib/python2.7/site-packages/tensorflow/core/framework/tensor_pb2.py", line 16, in <module>
    from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2
  File "/home/ xxx /anaconda2/lib/python2.7/site-packages/tensorflow/core/framework/resource_handle_pb2.py", line 22, in <module>
    serialized_pb=_b('\n/tensorflow/core/framework/resource_handle.proto\x12\ntensorflow\"m\n\x0eResourceHandle\x12\x0e\n\x06\x64\x65vice\x18\x01\x01(\t\x12\x11\n\tcontainer\x18\x02\x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\thash_code\x18\x04\x01(\x04\x12\x17\n\x0fmaybe_type_name\x18\x05 \x01(\tB4\n\x18org.tensorflow.frameworkB\x13ResourceHandleProtoP\x01\xf8\x01\x01\x62\x06proto3')
TypeError: __init__() got an unexpected keyword argument 'syntax'
View Code

再次輸入后,提示:

>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/xxx/anaconda2/lib/python2.7/site-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/home/xxx/anaconda2/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 51, in <module>
    from tensorflow.python import pywrap_tensorflow
ImportError: cannot import name pywrap_tensorflow
View Code

 對於第二個次出現的問題,很多人說是當前工作目錄不能在tensorflow的目錄內。但是實際上這邊沒有在該文件夾內。主要還是第一次import的錯誤沒有解決。

第一次的錯誤,好多網址,如http://stackoverflow.com/questions/33622842/error-in-python-after-import-tensorflow-typeerror-init-got-an-unexpect最佳答案說是電腦上安裝了多個版本的protobuf。我這邊開始使用sudo pip uninstall protobuf(或者不加sudo),某一次意外的把protobuf2.5卸載了。但是還是有這個問題。

之后http://stackoverflow.com/questions/35896335/how-can-i-uninstall-protobuf-3-0-0最佳答案指出,如果電腦是make安裝的protobuf,需要定位到protobuf編譯文件夾,使用make uninstall(或者加上sudo)來卸載。通過這種方法卸載后,使用protoc --version時,提示sudo apt-get install protobuf-compiler。說明已經成功卸載。

之后按照中https://github.com/tensorflow/tensorflow/issues/11vrv說的,python中輸入

import google.protobuf
print google.protobuf.__version__

輸出為3.2.0。說明python中protobuf可以用。

上面網址中liuyipei指出的,終端中輸入pip show protobuf,顯示:

才意識到,之前曾經安裝過protobuf 2.6.1,雖然卸載了2.6.1,但是沒有刪除2.6.1編譯時的文件夾(不清楚為何prptobuf還能使用)。刪除了該文件夾之后,順便把protobuf3.2的安裝文件夾也刪除了。。。

=========================================================

170322更新:

今天無意中發現(不記得什么時候添加的了。。。),.bashrc文件內,有

export PYTHONPATH=/home/xxx/protobuf-2.6.1/python:$PYTHONPATH

之前找到該文件夾,可能和這個有關系吧。刪了這句話。。。

170322更新結束

=========================================================

之后在輸入pip show protobuf后,顯示為:

再次在python中import tensorflow as tf后,終於成功了。運行官方最簡單的例子,也能成功。

不清楚把系統的protobuf給刪了,重啟會不會有問題吧。。。以前刪過自己電腦上的protobuf,貌似進不去系統了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM