Tôi làm việc với rất nhiều hệ thống đã bị các nhà phát triển chế giễu "theo chỉ dẫn họ tìm thấy trên internet". Điều cực kỳ phổ biến là bạn pip
và bạn python
không nhìn vào cùng một đường dẫn / gói trang web. Vì lý do này, khi tôi gặp phải sự kỳ quặc, tôi bắt đầu bằng cách làm điều này:
$ python -c 'import sys; print(sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']
$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
Đó là một hệ thống hạnh phúc .
Dưới đây là một hệ thống không hài lòng . (Hoặc ít nhất đó là một hệ thống không biết gì về hạnh phúc khiến người khác không vui.)
$ pip --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)
$ python -c 'import sys; print(sys.path)'
['', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']
$ which pip pip2 pip3
/usr/local/bin/pip
/usr/local/bin/pip3
Thật không vui vì pip
(python3.6 và) đang sử dụng /usr/local/lib/python3.6/site-packages
while python
là (python2.7 và) đang sử dụng/usr/local/lib/python2.7/site-packages
Khi tôi muốn chắc chắn rằng tôi đang cài đặt các yêu cầu cho đúng python, tôi sẽ làm điều này:
$ which -a python python2 python3
/usr/local/bin/python
/usr/bin/python
/usr/local/bin/python2
/usr/local/bin/python3
$ /usr/bin/python -m pip install -r requirements.txt
Bạn đã nghe nói, "Nếu nó không bị hỏng, đừng cố sửa nó." Phiên bản DevOps của điều đó là, "Nếu bạn không phá vỡ nó và bạn có thể làm việc xung quanh nó, đừng cố gắng sửa nó."
--no-index
để nó thậm chí không nhìn vào PyPI?