pythonrpath
怎樣安裝以源碼包打包的軟體;
1、源碼包的打包格式;
源代碼一般以file.tar.gz file.tar.bz2或file.src.rpm 打包;file.tar.gz和file.tar.bz2格式的解包命令如下;
[root@localhost beinan]# tar jxvf file.tar.bz2
[root@localhost beinan]# tar zxvf file.tar.gz
至於file.src.rpm 的用法,請參見:《file.src.rpm 使用方法的簡介》
2、如何編譯安裝源碼包;(大多數)
1)解開軟體包查看幫助文檔;
我們解開一個包後,進入解壓包,一般都能發現README(或reame)和INSTALL( 或install);或doc(或DOC)目錄;看名字就知道個差不多;
比如我們下載一個比較新的fcitx 的軟體包,比如是 fcitx-3.2-050827.tar.bz2
我們在解開這個軟體包會會發現如下的文件;
[root@localhost fcitx]# tar jxvf fcitx-3.2-050827.tar.bz2
[root@localhost fcitx]#cd fcitx
[root@localhost fcitx]# ls
aclocal.m4 config.guess configure debian INSTALL Makefile.in src xpm
AUTHORS config.h.in configure.in depcomp install-sh missing THANKS
autogen.sh config.rpath COPYING doc lib mkinstalldirs TODO
ChangeLog config.sub data fcitx.spec.in Makefile.am README tools
所以我們就可以看fcitx的INSTALL 和doc目錄的安裝文檔了;裡面都告訴我們如何安裝;
有時安裝文檔也會在開發者的主頁上有詳細的說明,及常見問題的處理等;比如 LumaQQ
2)編譯安裝軟體的條件;
首 先我們在linux系統中至少得把開發工具安裝上,比如 gcc ;perl;python;glibc;gtk;make ;automake 等開發工具或基礎包;還要安裝一些相應的開發包,一般是文件名包括dev的,比如kernel-devel;還有一些開發庫,比如以lib開頭的;如果您 在編譯軟體時,有時提示缺少什麼東西之類的,大多少的是這些開發工具和開發庫等;從光碟中找出安裝就是了;有時光碟沒有提供,請用google搜索相應的 軟體包,有時可能也會用到源碼包編譯安裝所依賴的包;
有時本來系統中已經安裝了所依賴的包,但系統提示找不到應該怎麼辦?這時需要我們設置一下PKG_CONFIG_PATH的環境變數就行了;
#export PKG_CONFIG_PATH=/usr/lib/pkgconfig
或
#export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
然後我們再來運行編譯的./configure ;make ;make install ,嘗試著來吧;
以java開發的工具開發的程序,要用到 jre或者jdk ;jdk已經包括jre了,所以如果我們只是要求有一個java程序運行的環境,只需要安裝jre就行了;安裝好jre,配置一下java的環境變數就可以用了。如果是圖形界面的程序,點點滑鼠就OK了;
用perl 開發的程序,是需要perl環境的,所以必須得把perl的包安裝上,python 也同理;
3)編譯安裝軟體的方法;
大多以tar.gz 和tar.bz2打包軟體,大多是通過 ./configure ;make ;make install 來安裝的;有的軟體是直接make;make install ;
我們可以通過./configure --help 來查看配置軟體的功能;大多軟體是提供./configure 配置軟體的功能的;少數的也沒有,如果沒有的就不用./configure ;直接make;make install 就行了;
./configure 比較重要的一個參數是 --prefix ,用--prefix 參數,我們可以指定軟體安裝目錄;當我們不需要這個軟體時,直接刪除軟體的目錄就行了;
比如我們可以指定fcitx 安裝到 /opt/fcitx 目錄中;
[root@localhost fcitx]#./configure --prefix=/opt/fcitx
如果我們不需要fcitx 時,可以直接刪除 /opt/fcitx 目錄;
所以我們舉這個例子中,fcitx如果定製安裝到 /opt/fcitx目錄中,完整的安裝方法應該是:
[root@localhost fcitx]# tar jxvf fcitx-3.2-050827.tar.bz2
[root@localhost fcitx]#cd fcitx
[root@localhost fcitx]# ./configure --prefix=/opt/fcitx
[root@localhost fcitx]# make
[root@localhost fcitx]# make install
調用fcitx ,應該是
[beinan@localhost ~]#/opt/fcitx/bin/fcitx
如果您想要讓fcitx 只要執行fcitx ,就能調用,請配置環境變數,或者在/usr/bin 中做一個fcitx 的鏈接;
[root@localhost beinan]# ln -s /opt/fcitx/bin/fcitx /usr/bin/fcitx
一般的情況下都有說,但大多軟體沒有提供源碼包的卸載方法;我們可以找到軟體的安裝點刪除。主要看你把它安裝在哪了。
設置環境變數PATH,請參見:《在Fedora Core 中,有些常用命令怎麼沒有?解決辦法設置PATH》
所以您的PATH可以設置成這樣的;
export PATH=".:/bin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/X11R6/bin:/sbin:/opt/fcitx/bin"
當然這只是舉個例子,fcitx 可以進入桌面自動運行的,請參看 http://www.fcitx.org 官方站上的安裝說明;舉個例子只是讓大家好理解一點;
再舉一個例子,比如我想安裝mlterm ;並指定安裝目錄為/opt/mlterm中; http://mlterm.sourceforge.net
#./configure --prefix=/opt/mlterm
#make
#make install
把源碼包安裝的軟體,都指定安裝在 /opt目錄中,這樣不就知道了軟體安裝在哪裡了;也方便卸載;
2. python tensorflow 怎麼添加auc
tensorflow添加自定義的auc計算operator
tensorflow可以很方便的添加用戶自定義的operator(如果不添加也可以採用sklearn的auc計算函數或者自己寫一個 但是會在python執行,這里希望在graph中也就是c++端執行這個計算)
這里根據工作需要添加一個計算auc的operator,只給出最簡單實現,後續高級功能還是參考官方wiki
注意tensorflow現在和最初的官方wiki有變化,原wiki貌似是需要重新bazel編譯整個tensorflow,然後使用比如tf.user_op.auc這樣。
目前wiki給出的方式>=0.6.0版本,採用plug-in的方式,更加靈活可以直接用g++編譯一個so載入,解耦合,省去了編譯tensorflow過程,即插即用。
首先auc的operator計算的文件
tensorflow/core/user_ops/auc.cc
/* Copyright 2015 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================================*/
// An auc Op.
#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/op_kernel.h"
using namespace tensorflow;
using std::vector;
//@TODO add weight as optional input
REGISTER_OP("Auc")
.Input("predicts: T1")
.Input("labels: T2")
.Output("z: float")
.Attr("T1: {float, double}")
.Attr("T2: {float, double}")
//.Attr("T1: {float, double}")
//.Attr("T2: {int32, int64}")
.SetIsCommutative()
.Doc(R"doc(
Given preidicts and labels output it's auc
)doc");
class AucOp : public OpKernel {
public:
explicit AucOp(OpKernelConstruction* context) : OpKernel(context) {}
template<typename ValueVec>
void index_sort(const ValueVec& valueVec, vector<int>& indexVec)
{
indexVec.resize(valueVec.size());
for (size_t i = 0; i < indexVec.size(); i++)
{
indexVec[i] = i;
}
std::sort(indexVec.begin(), indexVec.end(),
[&valueVec](const int l, const int r) { return valueVec(l) > valueVec(r); });
}
void Compute(OpKernelContext* context) override {
// Grab the input tensor
const Tensor& predicts_tensor = context->input(0);
const Tensor& labels_tensor = context->input(1);
auto predicts = predicts_tensor.flat<float>(); //輸入能接受float double那麼這里如何都處理?
auto labels = labels_tensor.flat<float>();
vector<int> indexes;
index_sort(predicts, indexes);
typedef float Float;
Float oldFalsePos = 0;
Float oldTruePos = 0;
Float falsePos = 0;
Float truePos = 0;
Float oldOut = std::numeric_limits<Float>::infinity();
Float result = 0;
for (size_t i = 0; i < indexes.size(); i++)
{
int index = indexes[i];
Float label = labels(index);
Float prediction = predicts(index);
Float weight = 1.0;
//Pval3(label, output, weight);
if (prediction != oldOut) //存在相同值得情況是特殊處理的
{
result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos);
oldOut = prediction;
oldFalsePos = falsePos;
oldTruePos = truePos;
}
if (label > 0)
truePos += weight;
else
falsePos += weight;
}
result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos);
Float AUC = result / (truePos * falsePos);
// Create an output tensor
Tensor* output_tensor = NULL;
TensorShape output_shape;
OP_REQUIRES_OK(context, context->allocate_output(0, output_shape, &output_tensor));
output_tensor->scalar<float>()() = AUC;
}
};
REGISTER_KERNEL_BUILDER(Name("Auc").Device(DEVICE_CPU), AucOp);
編譯:
$cat gen-so.sh
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
i=$1
o=${i/.cc/.so}
g++ -std=c++11 -shared $i -o $o -I $TF_INC -l tensorflow_framework -L $TF_LIB -fPIC -Wl,-rpath $TF_LIB
$sh gen-so.sh auc.cc
會生成auc.so
使用的時候
auc_mole = tf.load_op_library('auc.so')
#auc = tf.user_ops.auc #0.6.0之前的tensorflow 自定義op方式
auc = auc_mole.auc
evaluate_op = auc(py_x, Y) #py_x is predicts, Y is labels
3. !!500財富(解決後追加)。源碼包安裝的bind 忘記指定安裝目錄了,如何卸載干凈
理論上來說不刪除沒什麼影響的
只要你後面安裝的bind路徑起作用就可以了
最多就是浪費點空間
4. 如何將linux下的開源軟體轉化為windows上運行呢
這個沒那麼簡單的,如果是通過java、python等等實現的還好,但是Linux下的話貌似大多數程序都是源碼編譯二次打包的,所以移植到Windows平台沒那麼簡單。
就像你說要把Android程序給WP用,沒那麼簡單可以實現的,不然那些程序猿豈不沒有門檻了都。
5. 如何在CentOS6上安裝Python2.7和Python3.3-Python
CentOS 6自帶了Python 2.6.6(CentOS 7則自帶了Python 2.7)和一些非常好用的功能,如yum。但是,注意不要隨便升級自帶的Python以免yum不可用。 新版本將安裝在/usr/local目錄下以避免和自帶的版本沖突。
雖然「我」只在64位的CentOS 6.5進行了嘗試,但該教程應該適用於所有的CentOS 6版本(本人按此教程在CentOS 7上亦成功安裝Python3.4)。
下
面的示例命令您最好以root身份運行或者在命令前加sudo賦予許可權。但注意,若不是以root身份執行的話,make 與make
install最好分開執行,並且都在前面加sudo,連著寫,如sudo make && make install的話會在make
install過程中報許可權不足問題,因為sudo不作用於&&後面的make install。
安裝前准備
編
譯Python之前您最好先安裝一系列的開發工具和一些拓展庫,雖然不是必須的,但這樣Python才能依賴這些工具和拓展庫展示它強悍的功能。下面是利
用yum進行工具和拓展庫安裝的示例命令,直接執行即可(注意部分命令顯示不全,但可以通過移動游標查看和復制)。
yumgroupinstall"Development tools"
yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel
該考慮的因素
在您編譯和安裝Python之前,有些東西您是應該知道或考慮的。如下。
Unicode編碼
Python
編碼問題歷史悠久,但不用過多關注,知道它目前支持Unicode編碼即可(Python3中默認的)。考慮到兼容性等原因,除非有特殊的理由,您最好配
置下Python 3.2和更早的版本,使其支持UTF-32編碼,雖然會增加小小的內存代價。在Python
2.7中您可以通過在configure時添加選項--enable-unicode=ucs4 進行配置,而在Python 3.2中是--with-wide-unicode選項。
Shared library(動態共享庫)
目
前大部分的Linux系統自帶的Python都是以共享庫的方式編譯的,
此外,某些第三方工具例如mod_wsgi和Blender,沒有Python的共享庫還運行不了,所以,您最好還是把Python編譯成動態共享庫吧。
為了以共享庫方式編譯Python,您必須指明共享庫的路徑。您有兩種選擇:
在configure命令後面添加:LDFLAGS="-Wl,-rpath /usr/local/lib"從而將庫路徑直接編譯進Python中。
以記事本方式打開 /etc/ld.so.conf ,然後在文件最後添加新行:/usr/local/lib 。緊接著運行命令 /sbin/ldconfig 更新動態鏈接器。 添加後的文件內容在CentOS 6.5 如下:
/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
使用 「make altinstall」 而不是make install
切記,在安裝自定義版本的Python時,make altinstall命令是必須的!如果您使用一般的 make install命令,呵呵,您將會在解壓編譯的目錄下看到兩個命名一樣但版本不同的python,這有可能會導致一些意想不到的bug哦,具體是什麼作者沒說,我也不知道。
下載,編譯,安裝Python
如下命令可用於下載、編譯和安裝Python。注意,如果您打算安裝後手動修改/etc/ld.so.conf文件以更新動態鏈接器,那麼下面的 LDFLAGS 參數您就可以去掉了。
# Python 2.7.6:
wgethttp://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tarxfPython-2.7.6.tar.xz
cdPython-2.7.6
./configure--prefix=/usr/local--enable-unicode=ucs4--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
# Python 3.3.5:
wgethttp://python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tarxfPython-3.3.5.tar.xz
cdPython-3.3.5
./configure--prefix=/usr/local--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
執行上述命令之後,您可以在/usr/local/bin/python2.7或 /usr/local/bin/python3.3中找到新安裝的Python。而Python 2.6.6則可能在/usr/bin/python, /usr/bin/python2或 /usr/bin/python2.6找到。
下載和安裝Setuptools + pip
Setuptools早已取代 Distribute成為Python官方的拓展包管理器,以用於從Python Package Index安裝拓展功能包。 不同版本的Python需要的Setuptools版本不同。建議您也通過Setuptools安裝 pip,它提供了一些額外在安裝拓展功能包時很有用的功能。
以下的命令可用於安裝最新版Setuptools 和 pip。
# First get the setup script for Setuptools:
wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
# Then install it for Python 2.7 and/or Python 3.3:
python2.7ez_setup.py
python3.3ez_setup.py
# Now install pip using the newly installed setuptools:
easy_install-2.7pip
easy_install-3.3pip
# With pip installed you can now do things like this:
pip2.7install[packagename]
pip2.7install--upgrade[packagename]
pip2.7uninstall[packagename]
安裝的拓展功能包在/usr/local/lib/pythonX.Y/site-packages/中可以找到(X.Y是Python的版本號)。
接下來幹嘛?
如果您使用 Python 2.7,強烈建議您安裝virtualenv並學會使用它,它可用於創建獨立的 Python 環境。如果您使用 Python 3.3的話就可以省心些,它已被內置了。
不
同的 Python 運行環境(也叫沙盒) 可以有自己的 Python
版本和拓展功能包,就是說不同的Python安裝和運行的目錄不同,也可以為每個版本的Python安裝對應的名稱一樣但版本不同的拓展包。
這在開發多個功能不同的項目或在同一個項目中需要用到不同版本的Python是會很有用的。
創建您第一個獨立的Python環境
# Install virtualenv for Python 2.7 and create a sandbox called my27project:
pip2.7installvirtualenv
virtualenv-2.7my27project
# Use the built-in pyvenv program in Python 3.3 to create a sandbox called my33project:
pyvenv-3.3my33project
# Check the system Python interpreter version:
python--version
# This will show Python 2.6.6
# Activate the my27project sandbox and check the version of the default Python interpreter in it:
sourcemy27project/bin/activate
python--version
# This will show Python 2.7.6
deactivate
# Activate the my33project sandbox and check the version of the default Python interpreter in it:
sourcemy33project/bin/activate
python--version
# This will show Python 3.3.5
deactivate
6. 在linux上交叉編譯wxPython的時候遇到的一個找不到鏈接庫的問題,求解答
你這個文件到底在什麼地方?
/usr/local/arm/gtkdfp/lib
下面怎麼還有帶目錄名的 /usr/lib/
把程序裝載稀奇古怪的地方,出現任何問題都是可能的。
7. 如何支持自定義安裝的高版本openssl庫
1. Python官網下載源碼包(version 2.7.8)並解壓
2. 通過configure配置Makefile參數
假定先前已在/home/slvher/tools/openssl-1.0.1j路徑下成功安裝好高版本openssl,那麼,可以通過下面的環境變數來設置gcc的編譯/鏈接參數:
export LDFLAGS="-lssl -lcrypto -Wl,-rpath=/home/slvher/tools/openssl-1.0.1j/lib/" export CPPFLAGS="-I/home/slvher/tools/openssl-1.0.1j/include"
然後運行configure工具:
./configure --prefix=/home/slvher/tools/Python-2.7.8
configure運行完後,會生成Makefile,check無誤後,執行make && make install就能完成Python安裝。
3. 驗證Python支持的ssl版本
Python安裝成功且其bin路徑加入PATH環境變數後,可通過下面的命令來驗證是否正確支持高版本的openssl庫:
python -c "import ssl; print ssl.OPENSSL_VERSION"
例如我機器上的輸出結果如下:
OpenSSL 1.0.1j 15 Oct 2014
8. 編譯安裝php時出錯configure: error: build test failed.
對於PHP在./configure的時候出現下面問題:
checking whether to enable LIBXML support... yes
checking libxml2 install dir... /usr/local/libxml2/
checking for xml2-config path... /usr/local/libxml2//bin/xml2-config
checking whether libxml build works... no
configure: error: build test failed. Please check the config.log for details.
#按照提示我們查看php安裝目錄下的config.log文件,搜索xml2-config
[root@lamp-lnmp php-5.6.40]# vim config.log
#發現下面內容:
configure:23104: checking for xml2-config path
configure:23118: result: /usr/local/libxml2//bin/xml2-config
configure:23262: checking whether libxml build works
configure:23289: cc -o conftest -g -O2 -fvisibility=hidden -pthread -D_REENTRANT -Wl,-rpath,/usr/local/libxml2/lib -L/usr/local/libxml2/lib conftest.c
-lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl >&5
configure:23289: $? = 0
configure:23289: ./conftest
./conftest: /lib64/libz.so.1: version `ZLIB_1.2.3.3' not found (required by /usr/local/libxml2/lib/libxml2.so.2)
configure:23289: $? = 1
configure: program exited with status 1
configure: failed program was:
#我們這里查看一下這個/lib64/libz.so.1的文件,發現鏈接到一個舊的libz文件中,這里將/lib64/libz.so.1軟連接到新文件/usr/local/lib/libz.so.1.2.11中進行下面設置。
[root@lamp-lnmp ~]# ln -sf /usr/local/lib/libz.so.1.2.11 /lib64/libz.so.1
[root@lamp-lnmp ~]# ls -l /lib64/libz.so.1
lrwxrwxrwx 1 root root 29 Feb 2 11:13 /lib64/libz.so.1 -> /usr/local/lib/libz.so.1.2.11
9. 如何在CentOS6上安裝Python2.7和Python3.3
CentOS 6自帶了Python 2.6.6(CentOS 7則自帶了Python 2.7)和一些非常好用的功能,如yum。但是,注意不要隨便升級自帶的Python以免yum不可用。 新版本將安裝在/usr/local目錄下以避免和自帶的版本沖突。
雖然「我」只在64位的CentOS 6.5進行了嘗試,但該教程應該適用於所有的CentOS 6版本(本人按此教程在CentOS 7上亦成功安裝Python3.4)。
下面的示例命令您最好以root身份運行或者在命令前加sudo賦予許可權。但注意,若不是以root身份執行的話,make 與make install最好分開執行,並且都在前面加sudo,連著寫,如sudo make && make install的話會在make install過程中報許可權不足問題,因為sudo不作用於&&後面的make install。
安裝前准備
編譯Python之前您最好先安裝一系列的開發工具和一些拓展庫,雖然不是必須的,但這樣Python才能依賴這些工具和拓展庫展示它強悍的功能。下面是利用yum進行工具和拓展庫安裝的示例命令,直接執行即可(注意部分命令顯示不全,但可以通過移動游標查看和復制)。
yumgroupinstall"Development tools"
yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel
該考慮的因素
在您編譯和安裝Python之前,有些東西您是應該知道或考慮的。如下。
Unicode編碼
Python編碼問題歷史悠久,但不用過多關注,知道它目前支持Unicode編碼即可(Python3中默認的)。考慮到兼容性等原因,除非有特殊的理由,您最好配置下Python 3.2和更早的版本,使其支持UTF-32編碼,雖然會增加小小的內存代價。在Python 2.7中您可以通過在configure時添加選項--enable-unicode=ucs4 進行配置,而在Python 3.2中是--with-wide-unicode選項。
Shared library(動態共享庫)
目前大部分的Linux系統自帶的Python都是以共享庫的方式編譯的, 此外,某些第三方工具例如mod_wsgi和Blender,沒有Python的共享庫還運行不了,所以,您最好還是把Python編譯成動態共享庫吧。為了以共享庫方式編譯Python,您必須指明共享庫的路徑。您有兩種選擇:
在configure命令後面添加:LDFLAGS="-Wl,-rpath /usr/local/lib"從而將庫路徑直接編譯進Python中。
以記事本方式打開 /etc/ld.so.conf ,然後在文件最後添加新行:/usr/local/lib 。緊接著運行命令 /sbin/ldconfig 更新動態鏈接器。 添加後的文件內容在CentOS 6.5 如下:
/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
使用 「make altinstall」 而不是make install
切記,在安裝自定義版本的Python時,make altinstall命令是必須的!如果您使用一般的 make install命令,呵呵,您將會在解壓編譯的目錄下看到兩個命名一樣但版本不同的python,這有可能會導致一些意想不到的bug哦,具體是什麼作者沒說,我也不知道。
下載,編譯,安裝Python
如下命令可用於下載、編譯和安裝Python。注意,如果您打算安裝後手動修改/etc/ld.so.conf文件以更新動態鏈接器,那麼下面的 LDFLAGS 參數您就可以去掉了。
# Python 2.7.6:
wgethttp://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tarxfPython-2.7.6.tar.xz
cdPython-2.7.6
./configure--prefix=/usr/local--enable-unicode=ucs4--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
# Python 3.3.5:
wgethttp://python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tarxfPython-3.3.5.tar.xz
cdPython-3.3.5
./configure--prefix=/usr/local--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
執行上述命令之後,您可以在/usr/local/bin/python2.7或 /usr/local/bin/python3.3中找到新安裝的Python。而Python 2.6.6則可能在/usr/bin/python, /usr/bin/python2或 /usr/bin/python2.6找到。
下載和安裝Setuptools + pip
Setuptools早已取代 Distribute成為Python官方的拓展包管理器,以用於從Python Package Index安裝拓展功能包。 不同版本的Python需要的Setuptools版本不同。建議您也通過Setuptools安裝 pip,它提供了一些額外在安裝拓展功能包時很有用的功能。
以下的命令可用於安裝最新版Setuptools 和 pip。
# First get the setup script for Setuptools:
wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
# Then install it for Python 2.7 and/or Python 3.3:
python2.7ez_setup.py
python3.3ez_setup.py
# Now install pip using the newly installed setuptools:
easy_install-2.7pip
easy_install-3.3pip
# With pip installed you can now do things like this:
pip2.7install[packagename]
pip2.7install--upgrade[packagename]
pip2.7uninstall[packagename]
安裝的拓展功能包在/usr/local/lib/pythonX.Y/site-packages/中可以找到(X.Y是Python的版本號)。
接下來幹嘛?
如果您使用 Python 2.7,強烈建議您安裝virtualenv並學會使用它,它可用於創建獨立的 Python 環境。如果您使用 Python 3.3的話就可以省心些,它已被內置了。
不同的 Python 運行環境(也叫沙盒) 可以有自己的 Python 版本和拓展功能包,就是說不同的Python安裝和運行的目錄不同,也可以為每個版本的Python安裝對應的名稱一樣但版本不同的拓展包。 這在開發多個功能不同的項目或在同一個項目中需要用到不同版本的Python是會很有用的。
創建您第一個獨立的Python環境
# Install virtualenv for Python 2.7 and create a sandbox called my27project:
pip2.7installvirtualenv
virtualenv-2.7my27project
# Use the built-in pyvenv program in Python 3.3 to create a sandbox called my33project:
pyvenv-3.3my33project
# Check the system Python interpreter version:
python--version
# This will show Python 2.6.6
# Activate the my27project sandbox and check the version of the default Python interpreter in it:
sourcemy27project/bin/activate
python--version
# This will show Python 2.7.6
deactivate
# Activate the my33project sandbox and check the version of the default Python interpreter in it:
sourcemy33project/bin/activate
python--version
# This will show Python 3.3.5
deactivateCentOS 6自帶了Python 2.6.6(CentOS 7則自帶了Python 2.7)和一些非常好用的功能,如yum。但是,注意不要隨便升級自帶的Python以免yum不可用。 新版本將安裝在/usr/local目錄下以避免和自帶的版本沖突。
雖然「我」只在64位的CentOS 6.5進行了嘗試,但該教程應該適用於所有的CentOS 6版本(本人按此教程在CentOS 7上亦成功安裝Python3.4)。
下面的示例命令您最好以root身份運行或者在命令前加sudo賦予許可權。但注意,若不是以root身份執行的話,make 與make install最好分開執行,並且都在前面加sudo,連著寫,如sudo make && make install的話會在make install過程中報許可權不足問題,因為sudo不作用於&&後面的make install。
安裝前准備
編譯Python之前您最好先安裝一系列的開發工具和一些拓展庫,雖然不是必須的,但這樣Python才能依賴這些工具和拓展庫展示它強悍的功能。下面是利用yum進行工具和拓展庫安裝的示例命令,直接執行即可(注意部分命令顯示不全,但可以通過移動游標查看和復制)。
yumgroupinstall"Development tools"
yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel
該考慮的因素
在您編譯和安裝Python之前,有些東西您是應該知道或考慮的。如下。
Unicode編碼
Python編碼問題歷史悠久,但不用過多關注,知道它目前支持Unicode編碼即可(Python3中默認的)。考慮到兼容性等原因,除非有特殊的理由,您最好配置下Python 3.2和更早的版本,使其支持UTF-32編碼,雖然會增加小小的內存代價。在Python 2.7中您可以通過在configure時添加選項--enable-unicode=ucs4 進行配置,而在Python 3.2中是--with-wide-unicode選項。
Shared library(動態共享庫)
目前大部分的Linux系統自帶的Python都是以共享庫的方式編譯的, 此外,某些第三方工具例如mod_wsgi和Blender,沒有Python的共享庫還運行不了,所以,您最好還是把Python編譯成動態共享庫吧。為了以共享庫方式編譯Python,您必須指明共享庫的路徑。您有兩種選擇:
在configure命令後面添加:LDFLAGS="-Wl,-rpath /usr/local/lib"從而將庫路徑直接編譯進Python中。
以記事本方式打開 /etc/ld.so.conf ,然後在文件最後添加新行:/usr/local/lib 。緊接著運行命令 /sbin/ldconfig 更新動態鏈接器。 添加後的文件內容在CentOS 6.5 如下:
/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
使用 「make altinstall」 而不是make install
切記,在安裝自定義版本的Python時,make altinstall命令是必須的!如果您使用一般的 make install命令,呵呵,您將會在解壓編譯的目錄下看到兩個命名一樣但版本不同的python,這有可能會導致一些意想不到的bug哦,具體是什麼作者沒說,我也不知道。
下載,編譯,安裝Python
如下命令可用於下載、編譯和安裝Python。注意,如果您打算安裝後手動修改/etc/ld.so.conf文件以更新動態鏈接器,那麼下面的 LDFLAGS 參數您就可以去掉了。
# Python 2.7.6:
wgethttp://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tarxfPython-2.7.6.tar.xz
cdPython-2.7.6
./configure--prefix=/usr/local--enable-unicode=ucs4--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
# Python 3.3.5:
wgethttp://python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tarxfPython-3.3.5.tar.xz
cdPython-3.3.5
./configure--prefix=/usr/local--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
執行上述命令之後,您可以在/usr/local/bin/python2.7或 /usr/local/bin/python3.3中找到新安裝的Python。而Python 2.6.6則可能在/usr/bin/python, /usr/bin/python2或 /usr/bin/python2.6找到。
下載和安裝Setuptools + pip
Setuptools早已取代 Distribute成為Python官方的拓展包管理器,以用於從Python Package Index安裝拓展功能包。 不同版本的Python需要的Setuptools版本不同。建議您也通過Setuptools安裝 pip,它提供了一些額外在安裝拓展功能包時很有用的功能。
以下的命令可用於安裝最新版Setuptools 和 pip。
# First get the setup script for Setuptools:
wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
# Then install it for Python 2.7 and/or Python 3.3:
python2.7ez_setup.py
python3.3ez_setup.py
# Now install pip using the newly installed setuptools:
easy_install-2.7pip
easy_install-3.3pip
# With pip installed you can now do things like this:
pip2.7install[packagename]
pip2.7install--upgrade[packagename]
pip2.7uninstall[packagename]
安裝的拓展功能包在/usr/local/lib/pythonX.Y/site-packages/中可以找到(X.Y是Python的版本號)。
接下來幹嘛?
如果您使用 Python 2.7,強烈建議您安裝virtualenv並學會使用它,它可用於創建獨立的 Python 環境。如果您使用 Python 3.3的話就可以省心些,它已被內置了。
不同的 Python 運行環境(也叫沙盒) 可以有自己的 Python 版本和拓展功能包,就是說不同的Python安裝和運行的目錄不同,也可以為每個版本的Python安裝對應的名稱一樣但版本不同的拓展包。 這在開發多個功能不同的項目或在同一個項目中需要用到不同版本的Python是會很有用的。
創建您第一個獨立的Python環境
# Install virtualenv for Python 2.7 and create a sandbox called my27project:
pip2.7installvirtualenv
virtualenv-2.7my27project
# Use the built-in pyvenv program in Python 3.3 to create a sandbox called my33project:
pyvenv-3.3my33project
# Check the system Python interpreter version:
python--version
# This will show Python 2.6.6
# Activate the my27project sandbox and check the version of the default Python interpreter in it:
sourcemy27project/bin/activate
python--version
# This will show Python 2.7.6
deactivate
# Activate the my33project sandbox and check the version of the default Python interpreter in it:
sourcemy33project/bin/activate
python--version
# This will show Python 3.3.5
deactivate
10. esp32 vscode lauch 設置
第一步:安裝 VSCode C/C++ 擴展
1.在應用商店裡搜索 C++
2.安裝C/C++ IntelliSense, debugging, and code browsing
第二步:安裝 VSCode ESP-IDF 擴展
1.在應用商店裡搜索 Espressif
2.安裝 Develop and debug applications for Espressif ESP32, ESP32-S2 chips with ESP-IDF (帶樂鑫圖標)
第三步:配置ESP-IDF 擴展
1.按 F1 或Ctrl+Shift+P 打開命令面板
2.輸入 ESP-IDF: Configure ESP-IDF extension
載入初始設置時間較長,耐心等待
3.根據實際情況選擇不同的配置方式
Express: IDF 版本 配置Python環境,擴展將安裝IDF
Advanced: 手動配置已安裝的開發環境
Using Existing Setup : 使用擴展檢測出的環境
配置完成後顯示:All settings have been configured. You can close this window.
第四步:創建項目模板,檢測設置
1.按 F1 或Ctrl+Shift+P 打開命令面板 輸入ESP-IDF:Create project 或按Ctrl+E+C
2.選擇工程創建目錄
3.選擇模板類型
第五部:設置工作區的json文件
在settings.json文件中添加以下內容
"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.shellArgs.windows": ["/k", "c:\\esp\\esp-idf\\export.bat"],
"terminal.integrated.shell.linux": "/bin/bash",
"terminal.integrated.shellArgs.linux": ["--init-file", "~/esp/esp-idf/export.sh", "-i"],
"terminal.integrated.shell.osx": "/bin/bash",
"terminal.integrated.shellArgs.osx": ["--init-file", "~/esp/esp-idf/export.sh", "-i"],
"files.associations": {undefined
"*.md": "markdown",
"*.mdx": "tdx",
"stdio.h": "c"
},
可以在VSCode 終端中正常使用idf的各種命令。
第六步:編譯工程
可以使用ESP擴展下的各個按鈕完成項目的串口選擇、項目配置、Full Clearn、編譯、下載、監視
也可以使用命令行方式:
1.按Ctrl+` (~按鍵的位置)打開終端(第一次運行時擴展會有提示,選擇允許 其實質就是運行~/esp/esp-idf/export.sh)
2.選擇終止終端
3.重新打開終端 會看到export.sh運行的結果
Go to the project directory and run:
idf.py build
4.運行各種idf命令
第七部:下載程序並監測程序運行
1. 按Select Device Port 按鈕 或運行 ESP-IDF:Device configuration命令
按提示選擇/dev/ttyUSB1作為下載口
2.編譯完成後,可使用下載按鈕進行程序下載。此時會出現提示:
PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB1'
原因:
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 2月 3 11:21 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 2月 3 11:21 /dev/ttyUSB1
發現ttyUSB* 設備屬於root用戶 dialout 用戶組,當前用戶不屬於dialout用戶組
解決方案:
(1).執行以下命令
$sudo chmod 666 /dev/ttyUSB*
修改ttyUSB設備許可權為其它用戶可讀可寫。
缺點:電腦重啟後,又會出現這種問題,還要重新設置
(2).為了能讓普通用戶也能使用串口,可以增加udev規則來實現
$sudo vim /etc/udev/rules.d/70-ttyusb.rules
增加如下內容:
KERNEL=="ttyUSB[0-9]*",MODE="0666"
保存,重新插入USB轉串口,普通用戶就能搞定了
缺點:該方法會讓所有的普通用戶都具有訪問這些串口設備的許可權,存在一定的安全隱患
(3).將目標用戶加入dialout用戶組,可以使用以下任意一個命令
$sudo usermod -aG dialout <目標用戶名>
或:
sudo gpasswd --add <目標用戶名> dialout
重啟系統即可
第八部:跟蹤調試程序
1.按 OpenOCD Server 按鈕 輸出提示:
❌ Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
❌ Error: no device foun
按照 https://sourceforge.net/p/openocd/code/ci/master/tree/README 文檔解釋做如下操作:
(1). 將~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20200709/openocd-esp32/share/openocd/contrib/
目錄下的 60-openocd.rules 拷貝至 /etc/udev/rules.d/ 目錄下
(2).確保當前用戶屬於 plugdev 用戶組。 提示:運行 groups 命令可以查看當前用戶所屬的用戶組
(3).重啟系統
2.配置Debug 環境
參考:https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/DEBUGGING.md
註:該文檔中的模板有坑。
問題:
使用 ESP-IDF Debug Adapter 配置時出現如下提示:
pygdbmi.gdbcontroller.NoGdbProcessError: gdb process has already finished with return code: 127
按照 esp_debug_adapter 說明文檔 在~/.vscode/extensions/espressif.esp-idf-extension-0.6.1/esp_debug_adapter/ 目錄下
$pip install -r requirements.txt
問題依然存在 暫無解決思路
使用 Microsoft C/C++ extension to debug 配置時出現如下提示:
error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
實質是系統中沒有python2.7的庫,解決:
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libpython2.7
問題解決
同時也解決了使用 ESP-IDF Debug Adapter 配置時出現的問題 故是否需要pip install …… 不能確定
在使用 Microsoft C/C++ extension to debug 配置時 會提示出現異常,不用理會可正常跟蹤調試。
有時會提示
Error: couldn』t bind tcl to socket: Address already in use
則證明 剛剛啟動的 進程未被終止。
解決辦法:
a).查看當前活動進程
netstat為顯示網路相關信息 a(all:默認顯示所有,如果加了其他選項此項不生效) n(number:以數字形式顯示) t(僅僅顯示tcp連接),p(process:顯示該項是由哪個程序建立起來的)
$ sudo netstat -antp
b). 強制殺死它(假設進程號為3560,-9為強制殺死)
$ sudo kill -9 3560
Debug正常運行時,狀態欄由藍色變為棕色。
附:scode的各個json文件
c_cpp_properties.json
======================================
{undefined
"configurations": [
{undefined
"name": "ESP-IDF",
"compilerPath": "${default}",
"cStandard": "c11",
"cppStandard": "c++17",
"includePath": [
"${config:idf.espIdfPath}/components/**",
"${config:idf.espIdfPathWin}/components/**",
"${workspaceFolder}/**"
],
"browse": {undefined
"path": [
"${config:idf.espIdfPath}/components",
"${config:idf.espIdfPathWin}/components",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": false
}
}
],
"version": 4
}
settings.json
======================================
{undefined
"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.shellArgs.windows": ["/k", "c:\\esp\\esp-idf\\export.bat"],
"terminal.integrated.shell.linux": "/bin/bash",
"terminal.integrated.shellArgs.linux": ["--init-file", "~/esp/esp-idf/export.sh", "-i"],
"terminal.integrated.shell.osx": "/bin/bash",
"terminal.integrated.shellArgs.osx": ["--init-file", "~/esp/esp-idf/export.sh", "-i"],
"files.associations": {undefined
"*.md": "markdown",
"*.mdx": "tdx",
"stdio.h": "c"
},
"C_Cpp.clang_format_style": "Visual Studio",
"editor.formatOnSave": false,
"[cpp]": {undefined
"editor.quickSuggestions": true
},
"[c]": {undefined
"editor.quickSuggestions": true
},
"C_Cpp.intelliSenseEngine": "Tag Parser",
//配置下載介面
"idf.port": "/dev/ttyUSB1",
//配置下載方式
"idf.flashType": "UART",
//openOcd配置,根據開發板確定
"idf.openOcdConfigs": [
//新版建議用「board/XXX」 配置
"interface/ftdi/esp32_devkitj_v1.cfg",
"target/esp32.cfg"
]
}
launch.json
======================================
{undefined
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{undefined
"type": "espidf",
"name": "ESP_Debug",
"request": "launch",
"debugPort": 43474,
"logLevel": 2,
//模板中有坑的地方,模板內容為 "mode": "manual",
//這樣不能自動啟動 Debug Adapter
"mode": "auto",
"initGdbCommands": [
"target remote :3333",
"symbol-file ${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
"set remote hardware-watchpoint-limit 2",
"mon reset halt",
"flushregs",
"thb app_main",
"c"
],
"env": {undefined
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
{undefined
"name": "GDB",
"type": "cppdbg",
"request": "launch",
"MIMode": "gdb",
"miDebuggerPath": "${command:espIdf.getXtensaGdb}",
"program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
"windows": {undefined
"program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf"
},
"cwd": "${workspaceFolder}",
"environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],
"setupCommands": [
{ "text": "-enable-pretty-printing",
"ignoreFailures": true },
{ "text": "file '${workspaceFolder}/build/${command:espIdf.getProjectName}.elf'"},
{ "text": "target remote :3333" },
{ "text": "set remote hardware-watchpoint-limit 2"},
{ "text": "mon reset halt" },
{ "text": "thb app_main" },
{ "text": "flushregs" }
//{ "text": "c"}
],
"externalConsole": false,
"logging": {undefined
"engineLogging": true
}
}
]
}
tasks.json 這個文用系統生成的即可 略
————————————————
版權聲明:本文為CSDN博主「FuShaofeng」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/FuShaofeng/article/details/113633337