工做筆記(ubuntu開發環境項目 部署到 紅旗linux的工做環境)

在ubuntu16.4開發, 系統遷移到紅旗linux上,遇到了一些狀況。html

問題一: 紅旗linux上,找不到pippython

明明安裝過了python3, python3自帶pip,輸入pip爲何找不到?linux

緣由:沒有作linknginx

pip -V web

參考:https://www.cnblogs.com/belic/p/python3_install.htmlsql

分析: 安裝源碼程序編譯時,django

./configure prefix=/usr/local/python3ubuntu

make & makefilevim

源碼的安裝通常由3個步驟組成:配置(configure)、編譯(make)、安裝(make install),具體的安裝方法通常做者都會給出文檔,這裏主要討論配置(configure)。Configure是一個可執行腳本,
它有不少選項,使用命令./configure –help 我的認爲,你能夠忽略其餘的一切,但請把—prefix加上爲了之後的維護方便,若是沒有用這個選項,安裝過程結束後,該軟件所需的軟件被複制到不一樣的系統目錄下,很難弄清楚到底複製了那些文件、
都複製到哪裏去了—基本上是一塌糊塗了,—prefix選項的另外一個好處是卸載軟件或移植軟件。當某個安裝的軟件再也不須要時,只須簡單的刪除該安裝目錄,就能夠把軟件卸載得乾乾淨淨;
移植軟件只需拷貝整個目錄到另一個機器便可(相同的操做系統)

 

目的是把可執行程序放在特定的目錄。若是不指定prefix,可執行文件默認放在/usr /local/bin,庫文件默認放在/usr/local/lib,配置文件默認放在/usr/local/etc。其它的資源文件放在/usr /local/sharewindows

解決:

#ln -s /usr/local/python3/bin/python3 /usr/bin/python3

#ln -s /usr/local/python36/bin/pip3 /usr/bin/pip

#pip  install -U pip

 驗證:

#whereis pip3 , 則會顯示來自於 /usr/bin/python3

其實,安裝完python3後,應該把舊版本的python也一塊兒替換掉。參考:https://blog.csdn.net/lukabruce/article/details/82186534

問題二:安裝完pip後,安裝visualenv的問題

在pip install virtualenv後直接用 「virtualenv my_new_env」 來建立虛擬環境(my_new_env爲虛擬環境的目錄名)會提醒command not found
這是由於/usr/bin/中尚未建立軟鏈接。

方法1:去原來的安裝路徑目錄下執行,但太麻煩:  /usr/local/python3/bin/virtualenv env

若是不知道路徑的能夠經過 「find / -name virtualenv」 查找

方法2:建立連接

ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

而後任意目錄下均可以執行了。

virtualenv  new_env

 

 

 

問題二: pip install xxx 特別慢,下載東西的速度只有 10k/秒 左右

 

生成requirements.txt文件在開發環境ubuntu上:

(1)pip freeze > requirements.txt

(2)拷貝到紅旗linux環境

(3)pip install -r requirements.txt   特別特別慢

解決:更換pip源泉,我換的清華源

    阿里雲 https://mirrors.aliyun.com/pypi/simple/
  中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
  豆瓣(douban) http://pypi.douban.com/simple/
  清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/
  中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/

1.臨時安裝替換: pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple

2.永久替換:修改 ~/.pip/pip.conf (沒有就建立一個), 內容以下:

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

 

 

 

 

 windows:
直接在user目錄中建立一個pip目錄,如:C:\Users\xx\pip,新建文件pip.ini,內容以下

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

 參考https://blog.csdn.net/chenghuikai/article/details/55258957

 

 問題三 django can't find new sqlite version? (SQLite 3.8.3 or later is required (found 3.7.17))

啓動django時候報上述錯誤 :python3 manage.py runserver


sqlite版本太老,下載安裝新版本,並修改配置連接。

參考:https://qiita.com/rururu_kenken/items/8202b30b50e3bfa75821

下載,解壓
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz $ tar xvfz sqlite-autoconf-3280000.tar.gz
$ cd sqlite-autoconf-3280000
安裝,路徑爲/usr/local
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ sudo find /usr/ -name sqlite3 【find 路徑 -name 要找的內容】

上述指令,找到一大堆結果
/usr/bin/sqlite3  #老版本sqlite
/usr/lib64/python2.7/sqlite3 #目錄
/usr/lib64/python3.7/sqlite3 #目錄
/usr/local/bin/sqlite3  #剛剛安裝編譯的新版本sqlite
刪除垃圾
$ rm sqlite-autoconf-3280000.tar.gz
$ rm -rf ./sqlite-autoconf-3280000

確認版本
$ /usr/local/bin/sqlite3 --version
  3.28.0 2019-04-16
$ /usr/bin/sqlite3 --version
  3.7.17 2013-05-20
切換版本
$ sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
$ sudo ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3

# 由於sqlite3會依賴並使用第三方庫,全部要設置共享庫
# vi ~/.bashrcし,追加下面一行,

$ export LD_LIBRARY_PATH="/usr/local/lib"
使配置文件生效:
# source ~/.bashrc   
共享庫知識參考: http://www.javashuo.com/article/p-phqapamy-do.html

#用python確認sqlite版本
#python
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.28.0'
>>> exit()
能夠啓動django了
python3 manage.py runserver

最後,啓動django服務或batch

(1)virtualenv 下, 啓動 #source activate

 

 

(2)出現 (venv)目錄標記

在這個標記下,切換目錄,到django工程目錄,也就是manage.py所在的目錄

啓動web: python manage.py runserver 0.0.0.0:8000

啓動batch: python manage.py xxxxx(batch file)

 

 

==========如下是網友的在內網機部署python心得體會=============

這裏之內網機VMware虛擬機裏centos7.3安裝mitmproxy爲例:

1.首先,你得有一個外網機,跟內網機要裝的系統同樣,最好乾淨一點

2.外網機安裝好mitmproxy:

    查看pip3 list,記錄下來

    pip3 install mitmproxy

3.生成依賴清單

    pip3 freeze >requirements.txt

    從requirements.txt中去除第2個步驟中使用pip3 list查看獲得的安裝包

4.下載依賴包(建立一個/home/packet目錄,進入該目錄下執行如下命令)

    pip3 download ./ -r ../requirements.txt

這樣子安裝mitmproxy所須要的依賴包都在/home/packet目錄下了

5.安裝

目前我沒有找到解決依賴的好方法,我是暴力安裝的,反覆循環裝每個包,誰先裝上就說明這個包要先安裝。而後列個安裝順序,再到內網機上安裝


========外文網站的建議,對於============

2020年3月上旬,構築項目,在單位虛機環境建立python3.6.8+django2.2環境

參考手冊

https://www.cnblogs.com/klsw/p/11106166.html

https://www.django.cn/article/show-4.html  2個手冊結合作。

CentOS7 安裝Python3.6.8,centos和redhat asiaux都是yum系,基本同樣。

1. 安裝依賴環境
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
二、下載Python3.6.8
新建個/usr/local/python3文件夾
mkdir /usr/local/python3  
在python3文件夾下下載安裝包
(進入/usr/local/python3 )
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
解壓文件
tar -xvf Python-3.6.8.tar.xz
三、安裝Python3
建立安裝文件的路徑
mkdir /usr/local/python3
四、編譯(在解壓的文件夾下 /usr/local/python3/python3.6.8)
./configure --prefix=/usr/local/python3 #指定生成的lib bin conf等存放文職
五、安裝(在解壓的文件夾下 /usr/local/python3/python3.6.8)
make
make install  # 先make再make install
六、建立新版本的軟連接
建立新的軟鏈接  
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
注意:
原來系統自帶的 /usr/bin/python 是python2.6, 這個不能動,由於yum 安裝指令是基於python2的,/usr/bin/python動了,yun就很差用了。
檢查python的版本 python -V

 

繼續寫填坑記錄

 

我是按照 https://www.django.cn/article/show-4.html#banqian  , 來一步一步不熟nginx + uwsgi + django 的, 原文雖好,但未必適合你的環境,全部也會遇到不少坑。

下面就說說。

1、環境 python3.6.8, django 2.2

   sqlite.版本忘記了,好像是3.8.20,開始報錯版本低,已經升級到了最新版本。

  啓動django服務, python3 manage.py runserver 報錯

  File "/system/Django/django/db/backends/sqlite3/base.py", line 198, in get_new_connection
    conn = Database.connect(**conn_params)
sqlite3.NotSupportedError: URIs not supported

 解決辦法:

主要參考:https://blog.csdn.net/weixin_43883625/article/details/100708649

 找到你的虛擬環境。例如,去編輯 vim /www/env/mysite/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py

找到第198行, 在vim下, :set nu能夠顯示行號,幫助定位。把uri由True改成False

:set nu

 

也能夠參考:  http://www.javashuo.com/article/p-kszynnds-nq.html

2、

nginx:安裝報錯

安裝出錯, ./configure   error: the http rewrite module requires the pcre library 

安裝缺失的東西。

yum -y install pcre-devel

而後 ./configure

make

make install

nginx: (98: Address already in use)

提示 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) ,通常緣由是nginx端口被佔用了。

解決方案參考:http://www.javashuo.com/article/p-znljjvzw-nq.html

一、查看端口占用狀況:

sudo netstat -apn | grep 80

 

 

查看佔用端口的進程:

ps -ef | grep 3345

經過結果可知,80端口是Nginx自己佔用了,能夠殺掉進程,從新啓動Nginx

sudo kill -9 3345

sudo netstat -apn | grep 80

成功殺掉進程後,啓動Nginx

二、Nginx的啓停:參考

http://www.javashuo.com/article/p-ujikivhs-y.html

講解很是好

三、nginx 502 Bad Gateway 錯誤解決辦法

遇到這個問題,原本覺得是nginx自身有問題,還參考了csdn等,都是讓擴充資源數量。

結果,是uwsgi配置不對,django服務起不來形成的。

uwsgi配置好,這個問題天然解決。

 

四、uwsgi: invalid option -- 'x'

一路走來,處處是坑,又頭大了。 

uwsgi -x mysite.xml

執行上述指令時候,遇到錯誤,

解決方案,參考:https://blog.csdn.net/weixin_30652897/article/details/99783145

緣由:centos(redhat內核類似,屬於yum系)下,在沒有安裝libxml2時,pip安裝的uwsgi沒法支持xml格式的配置文件
解決:
yum install libxml*
pip uninstall uwsgi
pip install uwsgi

結果仍是不行(過後我想,當時只重裝了virtualenv環境,沒安裝系統環境, uwsgi都是每一個環境安裝,要2遍)

有時安裝libxml2後因爲pip緩存編譯結果,致使再次安裝uwsgi仍然報該異常。
能夠下載uwsgi源碼包後,本地手動編譯後安裝便可。

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz

我用python3.6.8編譯

tar zxvf uwsgi-latest.tar.gz

cd uwsgi-2.0.11.1/

python uwsgiconfig.py --build

python setup.py install

 

而後,去virtualenv環境

(venv) python setup.py install   #注意,目錄要切換到uwsgi-2.0.11.1 目錄,才能找到setup.py,安裝到虛擬環境

執行 uwsgi -x general.xml成功

general.xml是我項目的uwsgi配置文件。

 

Deploy Python virtualenv on no internet machine with different system

 

For anyone dealing with the same problem: The quickest way for me was to:
  1. Create a VirtualBox with the target system on the internet machine
  2. Download wheel files using pip download
  3. Migrate to the target machine
  4. Install with pip install --no-index --find-links pip_libs/ requests

 

程序更新升級後,沒必要啓動nginx,重啓uwsgi就能夠

#查看Uwsgi進程
ps -ef|grep uwsgi 
#用kill方法把uwsgi進程殺死,而後啓動uwsgi killall -9 uwsgi #啓動方法 uwsgi -x mysite.xml #Nginx平滑重啓方法 /usr/local/nginx/sbin/nginx -s reload
相關文章
相關標籤/搜索