2017-02-11 2 views
12

Ich versuche ein eigenes Paket zu erstellen. Das Paket ist sehr einfach, es hat ein Python-Modul und ein Bash-Skript. Ich möchte beide unter /usr/local/bin installieren, damit sie direkt ausgeführt werden können.Pip installiert keine entry_points als ausführbare Dateien

Hier ist meine setup.py Datei:

from setuptools import setup 

setup(
    name='deploy', 
    . 
    . 
    . 
    install_requires=['pyyaml', 'cot', 'jsonschema'], 
    entry_points={ 
     'console_scripts': [ 
      'cloud_config = cloud_config:main', 
     ], 
    }, 
    scripts=['deploy.sh'], 
) 

Hier Auszug aus Ausgabe von pip install ...:

running install_scripts 
    copying build/scripts-2.7/deploy.sh -> /usr/local/lib/python2.7.10/bin 
    changing mode of /usr/local/lib/python2.7.10/bin/deploy.sh to 755 
    Installing cloud_config script to /usr/local/lib/python2.7.10/bin 

Damit bin ich nicht in der Lage, entweder die Python oder die Bash-Skript direkt aufzurufen.

Irgendwelche Ideen?

Edit: Ich betreibe die pip auf Ubuntu 16.04.1 Maschine. Just versucht, das gleiche Paket auf einem Ubuntu 14.04-Rechner zu installieren und Verhalten ist wie erwartet. cloud_config.py und deploy.sh werden beide auf /usr/local/bin installiert und ich kann beide von überall auf dem System aufrufen.

+2

Ubuntu schwer Patches pip; Ich bin nicht überrascht, dass sie auch hier ihr Verhalten geändert haben. –

+0

Das ist absurd @MartijnPieters. Wie wird ein Paket erstellt, das ordnungsgemäß auf allen Plattformen installiert wird? – ronakg

+0

Ich habe gerade versucht, ein Paket basierend auf Ihrem 'setup.py' zu erstellen und zu Ubuntu 16.04 Vagrant-Box zu bereinigen - alles funktioniert gut.Wenn Sie weitere Informationen bereitstellen würden, könnte dies helfen, das Problem zu reproduzieren. Vielleicht etwas mit Versionen? Welche Version von setuptools verwenden Sie für die Assembly? Welches sind die Pip- und Setup-Tools auf dem Zielrechner? – Timur

Antwort

1

Schließlich I habe es zur Arbeit gebracht. Ich musste das Pip-Paket entfernen, das von apt installiert wurde.

sudo apt remove python-pip 

Und dann pip installieren wieder nach den Anweisungen auf ihrer Website - https://pip.pypa.io/en/stable/installing/.

wget https://bootstrap.pypa.io/get-pip.py 
sudo python get-pip.py 

Sieht aus wie pip von Ubuntu Standard-Repository ist nicht dasselbe wie ein von pypi verteilt.

0

Versuchen:

pip install --install-option="--prefix=$PREFIX_PATH" package_name 

z.B.

+0

Sind keine Einträge unter 'entry_points -> console_scripts' im PATH zu installieren, damit sie von überall her aufrufbar sind? – ronakg

+0

Nach dieser Dokumentation für Python-Verpackung - http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html – ronakg

2

Zwei Optionen, die ich mir vorstellen kann, zuerst, überprüfen Sie, dass Pip an der richtigen Stelle zeigt. So versuchen:

which python 

mir sagt:

/usr/bin/python 

Ihnen anders sein wird, den Pfad entsprechend dann zu Ändern Sie den Pfad sicherstellen, richtig eingestellt ist, so:

export PATH=/usr/bin/python:${PATH} 

Neu installieren Pip und versuchen Sie es erneut. dass Andernfalls könnte sein eine Abhilfe nicht pip in diesem Fall zu verwenden und versuchen:

python setup.py install 

die Ihren Standard-Python-Pfad verwendet (nicht pip) und sollte installieren:

/usr/local/bin 
+0

Mine sagt auch '/ usr/bin/python'. Sehen Sie meine Antwort unten, um zu sehen, was funktioniert hat. Ich habe immer noch keine Ahnung, warum Standard-Pip nicht funktioniert. – ronakg

Verwandte Themen