如果是用 python 直接跑:
python3 views.py
Traceback (most recent call last):
File "views.py", line 1, in <module>
from django.shortcuts import render
python 執行了程式,發現 import 或是程式有用到外部 library 而導致噴錯。
python3 -m py_compile views.py
如果是用 python 直接跑:
python3 views.py
Traceback (most recent call last):
File "views.py", line 1, in <module>
from django.shortcuts import render
python 執行了程式,發現 import 或是程式有用到外部 library 而導致噴錯。
python3 -m py_compile views.py
大家都知道把套件裝成 global 會發生什麼事吧?所以若要開發的 project 需要很複雜套件相依性,則可以考慮使用 Python 的 virtualenv。
先來安裝 pip3:
sudo aptitude install python3-pip
在用 pip3 來裝 virtualenv:
pip3 install virtualenv
會後在準備建立的專案執行以下指令:
python3 -m venv project
這個時後你會發現 project 目錄底下已經有不少東西了,這個時候就可以切入虛擬環境中:
$ source bin/activate
(project) $
奇蹟出現了,你的 prompt 最前面已經加上專案名稱,代表你已經完全在專案的環境底下,這環境下不管你用 pip 專什麼東西都不會影響到外部其他專案。
當開發結束,要離開個環境的時候,記得下指令「deactivate」以便離開虛擬環境。
今天剛好要處理 Zip 檔,目前看到功能比較齊全的專案應該是 Ne-Lexa/php-zip,但是用 composer require 時卻發生 error message 大噴發:
仔細一看 …. 居然有「v9.99.99」的版號,該不會要世界末日了吧?
打開 comploser.lock 看一下是怎麼回事,追蹤後得知相依性如下:
laravel v6.10.1 <= ramsey/uuid ^v3.7
ramsey/uuid <= paragonie/random_compat": "^1 | ^2 | 9.99.99"
兇手抓到了,看來在 paragonie/random_compat 有一個版本號是 v9.99.99,composer 會自動拉最新的版本號來使用,因此只要任何專案 require 時沒有指定版本編號,composer 就會自動把相依性對到 v9.99.99,如果其他 package 有關連到,就是直接 dependency conflict 了。
要處理掉這個問題,只要在 composer.json 也 require paragonie/random_compat,但是加上指定版本編號如 ^v2.0,這樣 composer 就只會拉到 v2.x.x 的版本,不會去用 v9.99.99 這個版本。
ref: