pip berhasil menginstal paket, tetapi file yang dapat dieksekusi tidak ditemukan dari baris perintah

110

Saya sedang mengerjakan mac OS X Yosemite, versi 10.10.3.

Saya menginstal python2.7 dan pip menggunakan macport seperti yang dilakukan di http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/

Saya berhasil menginstal paket dan mengimpornya ke dalam lingkungan python dan skrip python. Namun, setiap eksekusi yang terkait dengan paket yang dapat dipanggil dari baris perintah di terminal tidak ditemukan.

Adakah yang tahu apa yang mungkin salah? (Lebih detail di bawah)

Misalnya saat memasang paket bernama "rosdep" seperti yang diinstruksikan di http://wiki.ros.org/jade/Installation/Source

Saya dapat menjalankan: sudo pip install -U rosdep instalasi mana tanpa kesalahan dan file yang sesuai berada di/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Namun jika saya mencoba menjalankan sudo rosdep init:, ini memberikan kesalahan:"sudo: rosdep: command not found"

Ini bukan kesalahan khusus paket. Saya mendapatkan ini untuk paket apa pun yang diinstal menggunakan pip di komputer saya. Saya bahkan mencoba menambahkan

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

untuk saya $PATH. Tetapi executable tidak ditemukan di baris perintah, meskipun paket bekerja dengan sempurna dari dalam python.

Sanket_Diwale
sumber
ada virtualenv yang terlibat?
JL Peyret
tidak, tidak ada virtualenv yang terlibat.
Sanket_Diwale
ketika Anda sudo, Anda beralih ke $ PATH dari pengguna root, pastikan PATH-nya diperbarui, bukan PATH Anda
Anthony Perot

Jawaban:

48

periksa $ PATH Anda

tox memiliki mode baris perintah:

audrey:tests jluc$ pip list | grep tox
tox (2.3.1)

dimana itu?

(sunting: 2.7hal - hal tidak terlalu penting di sini, sub di sembarang 3.xdan pip berperilaku hampir sama)

audrey:tests jluc$ which tox
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/tox

dan apa yang ada di $ PATH saya?

audrey:tests jluc$ echo $PATH
/opt/chefdk/bin:/opt/chefdk/embedded/bin:/opt/local/bin:..../opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin...

Perhatikan /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin ? Itulah yang memungkinkan menemukan barang-barang saya yang diinstal pip

Sekarang, untuk melihat di mana hal-hal yang dari Python, mencoba melakukan ini (pengganti rosdepuntuk tox).

$python
>>> import tox
>>> tox.__file__

yang mencetak:

'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tox/__init__.pyc'

Sekarang, cd ke direktori tepat libdi atas di atas. Apakah Anda melihat direktori bin ? Apakah Anda melihat rosdepdi tempat sampah itu? Jika demikian, coba tambahkan binke $ PATH Anda.

audrey:2.7 jluc$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7
audrey:2.7 jluc$ ls -1

keluaran:

Headers
Python
Resources
bin
include
lib
man
share
JL Peyret
sumber
Terima kasih JL atas jawabannya, tetapi ini terutama masalah saya. Untuk contoh aplikasi rosdep saya, ketika saya melakukan seperti yang Anda lakukan, berikut adalah output yang diperoleh: pip list | grep rosdep rosdep (0.11.4) yang rosdep (tidak ada keluaran), baris perintah tidak mengembalikan apa pun
Sanket_Diwale
1
yang tidak kembali rosdepsesuai dengan masalah Anda. maksud saya adalah bahwa Anda perlu menemukan di mana rosdepdiinstal dan seperti apa $ PATH itu.
JL Peyret
Terima kasih, binari saya juga diinstal di /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin. Menambahkannya ke PATH dan sekarang berfungsi. Terima kasih, saya mengalami kesulitan menemukan binari karena tidak memberikan keluaran apa pun.
Sanket_Diwale
ekspor PATH = / opt / local / Library / Frameworks / Python.framework / Versions / 2.7 / bin: $ PATH hilang di jalur saya dan melakukan trik untuk saya di OSX
Caio Iglesias
1
Jika Anda tidak dapat menemukan program dengan which(jika belum ada di jalur Anda), Anda juga dapat mencoba mencari biner menggunakan mlocatedi linux atau mdfinddi macOS.
jackcogdill
54

Di macOS dengan instalasi python default, Anda perlu menambahkan /Users/<you>/Library/Python/2.7/bin/$ PATH Anda.

Tambahkan ini ke .bash_profile Anda:

export PATH="/Users/<you>/Library/Python/2.7/bin:$PATH"

Di situlah pip menginstal executable.

Tip: Untuk versi python non-default which pythonuntuk menemukan lokasi instalasi python Anda dan ganti bagian itu di jalur di atas. (Terima kasih atas petunjuknya Sanket_Diwale)

joh-mue
sumber
8
Tempat pemasangan pip bergantung pada cara Anda menginstal python, MacOS memiliki banyak cara untuk menginstal python, seperti macports, homebrew, dan default sistem. Bergantung pada versi python yang digunakan, Anda akan memiliki lokasi berbeda untuk pip. Cara mudah untuk mengetahui di mana pip dan python berada adalah dengan menggunakan "which python" di terminal dan kemudian menambahkan lokasi yang sesuai ke $ PATH.
Sanket_Diwale
Untuk macOS 10.14.3 menginstal Python 3.6 dari python.org, pandu which python3saya pada akhirnya (melalui tautan) ke /Library/Frameworks/Python.framework/Versions/3.6/bin/.
phoenix
42

Jika Anda menginstal menggunakan --user (misalnya pip3.6 install --user tmuxp), dimungkinkan untuk mendapatkan direktori instalasi pengguna khusus platform dari Python itu sendiri menggunakan sitemodul . Misalnya, di macOS:

$ python2.7 -m site --user-base
/Users/alexp/Library/Python/2.7

Dengan menambahkan /binini, kami sekarang memiliki jalur di mana paket yang dapat dieksekusi akan diinstal. Kami dapat secara dinamis mengisi PATH di file rc shell Anda berdasarkan keluaran; Saya menggunakan bash, tapi semoga ini portabel:

# Add Python bin directories to path
python3.6 -m site &> /dev/null && PATH="$PATH:`python3.6 -m site --user-base`/bin"
python2.7 -m site &> /dev/null && PATH="$PATH:`python2.7 -m site --user-base`/bin"

Saya menggunakan versi Python yang tepat untuk mengurangi kemungkinan executable "menghilang" saat Python meningkatkan versi minor, misalnya dari 3.5 ke 3.6. Mereka akan hilang karena, seperti yang bisa dilihat di atas, jalur instalasi pengguna mungkin menyertakan versi Python. Jadi sementara python3bisa menunjuk ke 3.5 atau 3.6, python3.6akan selalu mengarah ke 3.6. Hal ini perlu diingat saat menginstal paket lebih lanjut, misal: use pip3.6over pip3.

Jika Anda tidak keberatan dengan gagasan hilangnya paket, Anda dapat menggunakan python2dan python3sebagai gantinya:

# Add Python bin directories to path
# Note: When Python is upgraded, packages may need to be re-installed
#       or Python versions managed.
python3 -m site &> /dev/null && PATH="$PATH:`python3 -m site --user-base`/bin"
python2 -m site &> /dev/null && PATH="$PATH:`python2 -m site --user-base`/bin"
Alex Palmer
sumber
21

Saya tahu pertanyaan yang diajukan tentang macOS, tetapi berikut adalah solusi untuk pengguna Linux yang tiba di sini melalui Google.

Saya mengalami masalah yang dijelaskan dalam pertanyaan ini, setelah menginstal pdfx paket melalui pip.

Namun, ketika saya menjalankannya, tidak ada ...

pip list | grep pdfx
pdfx (1.3.0)

Namun:

which pdfx
pdfx not found

Masalah di Linux adalah bahwa pip install ...memasukkan skrip ke dalam ~/.local/bindan ini bukan pada Debian / Ubuntu default $PATH.

Berikut masalah GitHub yang membahas lebih detail: https://github.com/pypa/pip/issues/3813

Untuk memperbaikinya, tambahkan saja ~/.local/binke Anda $PATH, misalnya dengan menambahkan baris berikut ke .bashrcfile Anda :

export PATH="$HOME/.local/bin:$PATH"

Setelah itu, restart shell Anda dan semuanya akan berfungsi seperti yang diharapkan.

James Hibbard
sumber
2
Alih-alih memulai ulang shell Anda, Anda dapat source ~/.bashrcmemuat ulang .bashrckonfigurasi
Whiteclaws
1
Bagus. Saya mendapatkan "perintah tok tidak ditemukan". Setelah memperbarui PATH berfungsi
GabrielBB
5

Larutan

Berdasarkan jawaban lain, untuk linuxdan macAnda dapat menjalankan yang berikut ini:

echo "export PATH=\"`python3 -m site --user-base`/bin:$PATH\"" >> ~/.bashrc
source ~/.bashrc

bukannya python3Anda dapat menggunakan link lain ke versi python: python, python2.7, python3.6,python3.9 , dll

Penjelasan

Untuk mengetahui di mana paket pengguna diinstal di OS saat ini (win, mac, linux), kami menjalankan:

python3 -m site --user-base

Kami tahu bahwa skrip pergi ke bin/ folder tempat paket diinstal.

Jadi kami menggabungkan jalur:

echo `python3 -m site --user-base`/bin

Kemudian kami mengekspornya ke variabel lingkungan.

export PATH=\"`python3 -m site --user-base`/bin:$PATH\""

Akhirnya, untuk menghindari pengulangan perintah ekspor kami menambahkannya ke .bashrcfile kami dan kami menjalankan sourceuntuk menjalankan perubahan baru, memberi kami solusi yang disarankan yang disebutkan di awal.

Willemoes
sumber
Ini berhasil untuk saya dan saya tidak tahu mengapa
Benjamints
@Benjamints menambahkan penjelasan semoga membantu semoga berhasil!
Willemoes
Terima kasih banyak! :)
Benjamints
3

Di Windows, Anda perlu menambahkan jalur %USERPROFILE%\AppData\Roaming\Python\Scriptske jalur Anda.

Pantai Jared
sumber
2

Saya menemukan pertanyaan ini karena saya membuat, berhasil membangun dan menerbitkan Paket PyPI, tetapi tidak dapat menjalankannya setelah instalasi. The $PATHvariabel itu diatur dengan benar.

Dalam kasus saya, masalahnya adalah saya belum mengatur entry_pointdi setup.pyfile:

entry_points = {'console_scripts':

['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},
Thomas Johannesmeyer
sumber
2

Selain menambahkan bindirektori python ke $PATHvariabel, saya juga harus mengubah pemilik direktori itu, untuk membuatnya berfungsi. Tidak tahu mengapa saya belum menjadi pemiliknya.

chown -R ~/Library/Python/
d4Rk
sumber
0

Saat Anda menginstal Python atau Python3 menggunakan penginstal MacOS (diunduh dari situs web Python) - ia menambahkan exporter ke ~/.profileskrip Anda . Yang perlu Anda lakukan hanyalah sourceitu. Memulai ulang semua terminal juga harus melakukan triknya.

PERINGATAN - Saya yakin lebih baik menggunakan pip3 dengan Python3 - untuk manfaat di masa mendatang.

Jika Anda sudah menginstal Python3, langkah-langkah berikut berfungsi untuk saya di macOS Mojave:

  1. Instal kemungkinan pertama menggunakan sudo-sudo -H pip3 install ansible

  2. Anda membuat symlink ke Python binpath

sudo ln -s /Library/Frameworks/Python.framework/Versions/Current/bin /Library/Frameworks/Python.framework/current_python_bin

dan menjepitnya .profile

export PATH=$PATH:/Library/Frameworks/Python.framework/current_python_bin

  1. jalankan source ~/.profiledan restart semua shell terminal.

  2. Tipe ansible --version

ha9u63ar.dll
sumber