pip install numpy
pada python 2.7 mencoba menginstal numpy 1.17, yang menjatuhkan dukungan python 2.7. Ini bertentangan dengan fungsi yang dijelaskan dalam NEP 14 , yang menyatakan:
...
pip install numpy
pada Python 2 akan terus memberikan rilis terakhir yang berfungsi selamanya...
versi pip: 19.2.2
python: 2.7.15 |Anaconda, Inc.| (default, 23 Okt 2018, 18:31:10) n[GCC 7.3.0]
Tampaknya ada bug di pip atau setuptools yang menyebabkan ini, dapatkah Anda mencoba memutakhirkan pip? (lihat juga gh-13911 yang saya harapkan adalah duplikatnya). Anda mungkin dapat memutakhirkan pip dengan pip itu sendiri: python -m pip install --upgrade pip
dan python -m pip install --upgrade setuptools
?
pertanyaan sebenarnya adalah mengapa Anda menggunakan python 2.7
pertanyaan sebenarnya adalah mengapa Anda menggunakan python 2.7
ada banyak alasan yang sah untuk tetap menjalankan 2.7, tolong jangan mulai perdebatan itu di sini.
Tampaknya ada bug di pip atau setuptools yang menyebabkan ini, dapatkah Anda mencoba memutakhirkan pip? (lihat juga gh-13911 yang saya harapkan adalah duplikatnya). Anda mungkin dapat memutakhirkan pip dengan pip itu sendiri:
python -m pip install --upgrade pip
danpython -m pip install --upgrade setuptools
?
Saya menjalankan versi terbaru dari keduanya - pip 19.2.2 dan setuptools 41.1.0.
pertanyaan sebenarnya adalah mengapa Anda menggunakan python 2.7
ada banyak alasan yang sah untuk tetap menjalankan 2.7, tolong jangan mulai perdebatan itu di sini.
Memang ada. Dalam kasus saya, saya mencoba menjalankan perangkat lunak analisis ilmiah yang dikembangkan secara akademis yang belum di-porting ke py3.
Tetapi intinya di sini bukanlah apakah saya harus menggunakan python 2.7 atau tidak, itu adalah bahwa numpy membuat pernyataan formal tentang fungsionalitas yang diharapkan, dan itu bukan fungsionalitas yang sebenarnya. Itu, dalam pikiran saya, adalah bug.
Saya perhatikan kemarin bahwa pip tidak akan menginstal pytest 5.0.1 untuk Python 2.7 karena 2.7 tidak didukung, jadi pip berfungsi dengan benar dalam beberapa kasus. Saya ingin tahu apakah ada informasi di suatu tempat yang perlu diperbarui untuk 1.17?
Anda dapat mencoba python2.7 -mpip
untuk memastikan pip mengetahui versi apa yang sedang berjalan. Sepertinya Anda juga menggunakan Anaconda, yang bisa menjadi komplikasi saat dicampur dengan pip.
Apa yang which pip
tunjukkan?
Hmmm, di mesin saya, pip 18.1 dan setuptools 41.0.1 berfungsi dengan baik (baik biner maupun tanpa mode biner). Memutakhirkan ke 19.2.2 dan 41.1.0 tidak mengubah apa pun bagi saya. Versi python adalah 2.7.16+
(debian).
Sebagai catatan Chuck, saya berasumsi Anda memastikan untuk menggunakan python2.7 -mpip
alih-alih pip
untuk memastikan bahwa Anda mendapatkan versi terinstal terbaru (jika Anda menggunakan --user
atau memiliki yang lain versi pip sekitar untuk beberapa alasan.)?
Akan sangat baik untuk memahami apa sebenarnya yang menyebabkan ini.
@IPetrik apakah Anda dapat mengumpulkan contoh yang sepenuhnya dapat direproduksi? Anda menggunakan Anaconda, jadi sesuatu seperti:
conda create -n py27-empty
conda activate py27-empty
conda install pip
# Some diagnostics
which pip
pip --version
conda list setuptools
pip install numpy
Saya mencoba beberapa variasi ini, tetapi tidak dapat mereproduksi masalah Anda.
Setelah mencoba menyiapkan contoh minimal, saya menemukan masalahnya: kami menggunakan server cache devpi PyPI lokal yang ada di pip.conf
sebagai extra-index-url
. Jika saya menghapusnya dari pip.conf
, semuanya berfungsi dengan baik... oops.
Hmm, sepertinya pip harus menangani itu. Apakah ada sesuatu yang istimewa tentang cache dan pip.conf
? Saya tidak terbiasa dengan hal-hal itu. @njsmith Ada ide?
Saya ingin tahu apakah server devpi tidak meneruskan metainformasi tentang versi yang tersedia untuk paket yang diberikan dengan benar.
Menemukan satu alasan mengapa pip
dapat mencoba menginstal 1.17.0 untuk Python 2.7. Ini terjadi ketika sebuah paket menggunakan setup_requires='numpy'
. Ini karena itu akan memanggil easy_install
kecuali paket itu memiliki pyproject.toml
(lihat https://github.com/pypa/pip/issues/6945#issuecomment-526479930).
Ada solusinya: lakukan secara eksplisit pip install numpy
sebelum pip install package-with-setup-requires
.
Dan perbaikannya adalah: paket itu harus menambahkan pyproject.toml
, yang akan membuat masalah ini hilang untuk rilis baru dari paket itu.
Menemukan satu alasan mengapa
pip
dapat mencoba menginstal 1.17.0 untuk Python 2.7. Ini terjadi ketika sebuah paket menggunakansetup_requires='numpy'
. Ini karena itu akan memanggileasy_install
kecuali paket itu memilikipyproject.toml
(lihat pypa/pip#6945 (komentar) ).Ada solusinya: lakukan secara eksplisit
pip install numpy
sebelumpip install package-with-setup-requires
.
Kasus konkretnya adalah pip install pycuda
, yang gagal seperti:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-LYaxup/pycuda/setup.py", line 251, in <module>
main()
...
File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 44, in _execfile
code = compile(script, filename, 'exec')
File "/tmp/easy_install-mp9NYd/numpy-1.19.0rc1/setup.py", line 182
raise ValueError(f'Submodule {p} missing')
^
SyntaxError: invalid syntax
Solusinya sederhana, seperti yang dicatat oleh @rgommers : pertama-tama jalankan pip install numpy==1.16.6
(untuk rilis NumPy yang kompatibel dengan Python 2.7 terakhir) dan kemudian coba kembali pip install pycuda
.
Itu adalah bug pip
, dan sepertinya sangat serius. Saya dapat mereproduksinya dengan pip 20.1.1. pip-2.7 install numpy
menginstal dengan benar 1.16.6
, jadi metadata untuk numpy di PyPI sudah benar. pip-2.7 install pycuda
mencoba menginstal numpy terbaru alih-alih 1.16.6
.
Kemungkinan itu sudah dilaporkan, saya tidak punya waktu untuk memeriksanya dalam beberapa hari mendatang. @artob jika Anda melihat apakah ada masalah Pip untuk ini dan buka yang lain, itu akan sangat dihargai.
Komentar yang paling membantu
ada banyak alasan yang sah untuk tetap menjalankan 2.7, tolong jangan mulai perdebatan itu di sini.