2016-05-05 12 views
8

Ich habe eine Benutzerumgebung, in der die meisten Python-Pakete auf einer Netzwerkfreigabe installiert sind und über die Umgebungsvariable PYTHONPATH zur Verfügung gestellt werden. Python selbst wird immer noch lokal installiert. Einige dieser Pakete müssen setuptools Entry Points registrieren. Normalerweise würde dies passieren, indem Sie die setup.py Datei für das Paket ausführen, aber da diese an einem Netzwerkspeicherort installiert sind, wird setup.py niemals mit der lokalen Installation von Python ausgeführt.Wie registriere ich Eintrittspunkte für Netzwerk-Python-Paket-Installationen?

Gibt es eine Möglichkeit, Einstiegspunkte zu registrieren, ohne ein Paket in der lokalen Python-Installation zu installieren?

Ein Beispiel für einen Einstiegspunkt, die

setup(
    ... 
    entry_points={ 
     'xx_plugin': ['value = package.module:func'], 
    } 
) 
+0

Welche Einstiegspunkt? Ist es für die Registrierung von Plugins, 'console_scripts',' gui_scripts' oder etwas anderem? Ein Proof of Concept Code-Snippet für die Verwendung des Einstiegspunktes wäre hilfreich. –

+0

@LexScarisbrick Alles oben genannte. Ich habe ein Beispiel für einen Einstiegspunkt hinzugefügt, der einen Rückruf für ein Plugin installiert. Gibt es eine Möglichkeit, setuptools anzuweisen, die Einstiegspunkte zu installieren, ohne das Python-Paket zu installieren? –

Antwort

2

Run setup.py

Der console_scripts und gui_scripts Einspeisepunkten eigenständige Skripts erstellen, die ein aufrufbare Objekt wickeln einen Rückruf für ein Plugin-System registriert. Das coverage Paket ist ein gutes Beispiel dafür. Es verfügt über einen Einstiegspunkt, um aus praktischen Gründen ein Wrapper-Skript zu erstellen. Beispiel setup.py Schnipsel eine Konsole Skript zu erstellen:

setup(
    ... 
    entry_points = { 
     'console_scripts': [ 
      'script_name = package.module:function' 
     ] 
    } 
) 

Es ist möglich, nur die Skripte in einem bestimmten Verzeichnis über setup.py zu installieren. Ein vorhandenes Skript wird nur überschrieben, wenn das Argument --force übergeben wird.

Bei einem Plugin wird der Einstiegspunkt als Metadaten in einem Ei gespeichert, das normalerweise mit dem Paket installiert wird. Beispiel-Plug-Einstiegspunkt:

setup(
    ... 
    entry_points = { 
     'group_name': [ 
      'plugin_name = package.module:function' 
     ] 
    } 
) 

Es ist möglich, nur die Metadaten eines Pakets zu installieren (einschließlich Eintrittspunkte) in einem bestimmten Verzeichnis über setup.py.

python setup.py egg_info --egg-base $PYTHONPATH 

Ihre eigene Rolle

Wenn setup.py kann nicht ausgeführt werden, um die Ei-Metadaten zu schreiben, ist es durchaus möglich ist, Ihre eigene Rolle, wie es in einem Verzeichnis nur eine Textdatei ist. Beispiel Metadaten basierend auf dem oben Einstiegspunkt:

# $PYTHONPATH/entry_points.egg-info/entry_points.txt 
[group_name] 
plugin_name = package.module:function 

Einstiegspunkt-Lookup zu testen:

import pkg_resources as pkg 

for entry_point in pkg.iter_entry_points('group_name'): 
    plugin_name = entry_point.name 
    plugin_module_name = entry_point.module_name 
    plugin_callable = entry_point.load() 
    # do something with plugin