ฉันทำงานกับระบบจำนวนมากที่ถูกนักพัฒนาล้อเล่นโดยทำตามคำแนะนำที่พบบนอินเทอร์เน็ต เป็นเรื่องธรรมดามากที่คุณpip
และคุณpython
ไม่ได้มองหาเส้นทาง / แพ็คเกจไซต์เดียวกัน ด้วยเหตุนี้เมื่อฉันพบกับสิ่งแปลกประหลาดฉันเริ่มต้นด้วยการทำสิ่งนี้:
$ 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)
นั่นคือระบบที่มีความสุข
ด้านล่างนี้เป็นระบบที่ไม่มีความสุข (หรืออย่างน้อยก็เป็นระบบที่โง่เขลาอย่างไร้ความปราณีซึ่งทำให้ผู้อื่นไม่มีความสุข)
$ 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
มันไม่มีความสุขเพราะpip
เป็น (python3.6 และ) ใช้/usr/local/lib/python3.6/site-packages
ขณะที่python
เป็น (python2.7 และ) ใช้/usr/local/lib/python2.7/site-packages
เมื่อฉันต้องการตรวจสอบให้แน่ใจว่าฉันกำลังติดตั้งข้อกำหนดไปยังงูหลามที่ถูกต้องฉันจะทำสิ่งนี้:
$ 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
คุณเคยได้ยินว่า "ถ้ามันไม่พังอย่าพยายามแก้ไข" เวอร์ชันของ DevOps คือ "ถ้าคุณไม่ทำลายมันและคุณสามารถแก้ไขได้อย่าพยายามแก้ไข"
--no-index
ดังนั้นมันจึงไม่ได้ดู PyPI?