2018年4月29日 星期日
2018年4月9日 星期一
How to deploy a django project with Apache
參考連結:
How to deploy a django project with Apache ~ Innuy Developers Blog
超痛恨python的安裝,總是許多坑…這次django的伺服器架設也不例外。 網路上的資源一堆但是版本也是五花八門眼花撩亂(e04)。
以下是我自己安裝測試成功的解法:
步驟一 確認在虛擬環境下執行
裡面有安裝virtualenv方法:
macOS: Install OpenCV 3 and Python 2.7 - PyImageSearch
步驟二 apache安裝:
macos本身已有內建apache,不過版本是2.4,更新方式:
- Updating Apache
Mac OS X El Capitan and Mac OS X Sierra both come with Apache pre-installed. As noted above, your Apache configuration file is overwritten me when you upgrade to Mac OS X Sierra.
There were a few differences in the configuration files. However, since both El Capitan and Sierra run Apache 2.4, you can simply backup the configuration file from Sierra and overwrite it with your El Capitan version:
12sudo cp /etc/apache/httpd.conf /etc/apache/httpd.conf.sierra
sudo mv /etc/apache/httpd.conf.pre-update /etc/apache/httpd.conf
啟動內建的Apache:
1234sudo apachectl start
# sudo apachectl stop 關閉
# sudo apachectl restart 重啟
步驟三 mod_wsgi 安裝:
-
從pypi(python package index)網站下安裝:
python.org/pypi/mod_wsgi -
內文提到:
1$ pip install mod_wsgi
啟動:
12$ mod_wsgi-express start-server
# 跳出按control+c
- 去內建localhost確認:http://localhost:8000/
步驟四 串起apache,Django,wsgi 關係:
- 先在django project裡面的setting.py 增加:
1234MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
- 再來在terminal執行:
1$ python manage.py collectstatic
- 讓apache認得wsgi 取得mod-wsgi安裝位置, 在terminal執行:
1$ mod_wsgi-express module-location
我這台電腦結果如下:
1/Users/bobobo746/.virtualenvs/cv3/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so
- 再把結果貼到檔案路徑: /etc/apache2/httpd.conf.
找到一堆 LoadModule 的地方,然後補上:
1LoadModule wsgi_module /Users/bobobo746/.virtualenvs/cv3/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so
- 測試確認,在terminal 執行:
1$ apachectl -t -D DUMP_MODULES | grep wsgi
應出現: wsgi_module (shared)
但很有可能httpd.conf裡面沒有預先給定servernmame所以會報錯,如果報錯,則在httpd.conf裡面找到
1#ServerName www.example.com:80
下一行補上:
123ServerName 0.0.0.0 #不寫死localhost
# 如要改為對外,在這邊改對外ip
- 讓apache認得django httpd.conf最後一行有提到 Include /private/etc/apache2/other/*.conf 。要讓python的檔案能被讀到就要在other資料夾底下增加.conf檔案: (以下是我改好我的)
123456789101112131415161718WSGIScriptAlias / /Users/bobobo746/Desktop/stuff/python/Python3/U/U/wsgi.py
WSGIDaemonProcess example python-home=/Users/bobobo746/.virtualenvs/cv3/ python-path=/Users/bobobo746/Desktop/stuff/python/Python3/U
WSGIProcessGroup example
Require all granted
Alias "/static/" "/Users/bobobo746/Desktop/stuff/python/Python3/U/static"
Require all granted
Options +Indexes
註釋:
- exmaple :變數名稱 可以更改
- WSGIScriptAlias :專案裡 wsgi.py 的路徑
- WSGIDaemonProcess : 虛擬環境的路徑 還有專案的路徑
- <directory “專案路徑”>
- 最後串起來後測試看看:
1$ sudo apachectl restart
- 如果要改port,可以到httpd.conf 找到 :
12#Listen 12.34.56.78:80
Listen 80
改成自定義的port
- 回 django的 setting.py 做以下修正:
123DEBUG = False
ALLOWED_HOSTS = ["*",]
- 本機ip固定是127.0.0.1 ,所以測試時候去chrome打:
127.0.0.1:8081/here (我在listen那邊修改了port為8081, 且我專案的連結在here會吐出字串)
- 測試成功 QQ 可以好好專注寫code了…
在其他方式測試時遇到問題:
- 因為我在其他方式測試時雨到問題所以修改過權限,所以在這邊的方法就沒碰到,但有可能在此方法也會遇到permission的問題,可能是路徑的資料夾的權限要改為唯讀:
- 對資料夾按右鍵,選取得資訊
- 最下面,分享與權限,everyone要改為唯讀
2017年5月16日 星期二
開頭先引用下大陸網友針對安裝python+opencv所下的註解吧:
"如何正确安装OpenCV历来是一个堪称玄学的问题,在成功安装OpenCV的道路上经历了种种艰辛,这真的是我最恶心的一次安装经历"
認同,因為我也花了四天的時間在安裝。由於本身系統下之前就已經安裝過不同版本的python,再加上用的是notebook做分析開發。所以一直沒有正視過標準IDE+opencv。 藉著公司專案告一段落,就開始思考因為notebook的檔案格式是.ipynb很明顯地跟.py檔是不同,也意味著我在分析上用notebook可以很方便快速,但是如果當我要導入到Arduino或其他系統端要應用時就不可能了。 簡單來說就是該面對的還是要面對....
上網找了Pycharm做IDE,基本上設定相關沒太大問題,只是需要習慣下操作模式。(畫圖,import,debug,查看變數 等等 )
接下來要測試影像處理,之前在notebook上有 import cv2 ,原以為已經安裝成功了,雖然當時心裡想說 怎一下下就安裝好了??想當初在xcode上要安裝也是花了老半天。 果然在跑pycharm時候就報錯了:
The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or
Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and
pkg-config, then re-run cmake or configure script
一開始以為是少安裝了GTK之類的,上google上找看到大多數碰到這類error的好像都是ubuntu的系統,所以就開始到處亂安裝@@ 結果當然不行
後來仔細看看報錯原因,似乎是說明function沒有被implement,也就是說我安裝不完全。
想想也對,之前載opencv都好幾百mb然後安裝都要時間,我當初在terminal上用 pip install opencvㄧ下下就好 這差異也太大。
於是上網找了下資訊,最後找到有正解的教學:
http://www.pyimagesearch.com/2016/11/28/macos-install-opencv-3-and-python-2-7/
那到底難在哪呢?
前面提到,因為我系統本身就安裝過很多版本的python 有2也有3 後來安裝opencv2,3 也透過anaconda安裝過 也從官網下載過, 所以可以說是系統雜 亂。再加上教學上提到需要增加虛擬環境來安裝,雖然不是必要 ,再加上我覺得麻煩所以沒完全按照他的教學步驟,導致後來一直安裝不成功。。。
最後想開了,因為系統亂灌,最安全的方式,就是需要在乾淨的環境下安裝才能確保沒有其他因素造成安裝出問題,其實最大因素就是出在路徑啦!!!
所以依照上面網址教學一步步安裝確保都沒有不同就沒問題了。
在這邊補充一些如果python上有灌一堆版本,如: 透過brew ,官網,Anaconda,.....
在正式重新安裝時先把東西殺一殺:
- 官網的安裝了就安裝了,不用動
- anaconda 我是把它都殺掉因為其實我都沒用到它的安裝包,免得來亂
- 再來就是brew的部分,先把他殺掉。 因為教學的安裝路徑是以brew為主
- 可以先確認python安裝位置:
python
which python
一定要是:
python
usr/local/bin/python
如果不是,依照下面步驟:把他弄乾淨:
1.先在 ~/.bash_profile 裡面增加brew安裝路徑: https://gist.github.com/patriciogonzalezvivo/77da993b14a48753efda
export PATH=/usr/local/bin:$PATH
2.再到終端機:
\( brew uninstall --force python
\) brew install python
\( brew link --overwrite python
\) brew linkapps python
\( pip install --upgrade pip setuptools
\) sudo pip uninstall virtualenv
\( pip install virtualenv
\) sudo pip uninstall virtualenvwrapper
$ pip install virtualenvwrapper
3.再用which python確認位置是否正確,都沒錯就可以依照網頁教學正常安裝。http://www.pyimagesearch.com/2016/11/28/macos-install-opencv-3-and-python-2-7/
測試code: (先把安裝好後的環境引入pycharm再測試)
import cv2
image = cv2.imread("123.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Original", gray)
cv2.waitKey(0)
The perfect computer vision environment: PyCharm, OpenCV, and Python virtual environments :
http://www.pyimagesearch.com/2015/08/17/the-perfect-computer-vision-environment-pycharm-opencv-and-python-virtual-environments/
2017年4月3日 星期一
這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote |
- 想說findcontour找到的輪廓大多不是正確的,覺得分區塊做篩選又太不智能
這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote |
2017年3月28日 星期二
- python,numpy,pandas数据处理之小技巧
- 排序: iterable為放置需要排序的陣列或是list(可迭代),reverse則是看要不要反過來排序,預設是false
- 排序:(np.sort) 排序。可以依照raw or column來排序
- list ,ndarray 小數轉int:
- list與array:
- list(str) : 把str轉成list:str裡面的每個字元都被當成'字串':
- list轉array
- 一維array轉2維:
- List 新增:
a=[1,2,3,4]
b=[5,6,7,8]
- array新增(一維): np.append
- aa= np.array([1,2,3,4])
- bb= np.array([5,6,7,8])
[5 6 7 8]]
- List 移除 插入
- List replace:
- 字串拆解和結合(list)---結合: .join 把原本list裡的char 依照串接的字符變成新的字串
- 字串拆解和結合(list)---拆解: .split() 把原本的字串拆解並存成list
- list刪除:
- ndarray 裡的值如果要修改:
- pandas 轉array ,list
# 轉array:
df[column
].as_matrix()
# 轉list:
df[column
].values.tolist()
- 取值的位置(index):
- input() 與raw_input():
- 把滑鼠複製的data轉成dataframe:
- 一般存檔:
- 一般讀檔: pickle沒有副檔名
- pandas存pickle檔:
- pandas讀pickle檔:
- numpy 存檔:(自動存成npy檔):
- numpy 讀檔:
- text讀檔: 讀出來格式是str 字符串
- 確認dataframe是否為null:
- 確認array是否為null:
- 設定nan:
- 用 np.isfinite() 判斷布林值
- 再利用上面的判斷 ,忽略nan值
- numpy.ndarray 的nan填補:
- dataframe 的nan填補:
- 線性迴歸:
- 畫圖的colormap設定 與 c的隨機配色
- 要把list裡面的數字都round(取小數四捨五入):
這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote |