Plugin ed esportazione di un'API tra script Python

0

Ho uno script python, che dovrebbe leggere una sottodirectory e rendere tutti gli script al suo interno richiamabili in questo modo:

python mainscript.py subscript arguments

Ho capito la maggior parte dei dettagli, ma sto avendo molti problemi a decidere come esportare un'API (oggetto o funzioni selezionate) su subscript s che mainscript importa. L'intenzione è che subscript s funzioni come comandi inseribili in mainscript (in altre parole, non è necessario che funzionino autonomamente).

Le cose che ho provato, che penso sarebbe abbastanza elegante sono (dopo import subdirectory.subscript in mainscript ):

  1. import __main__

    che funziona, ma dà al mio sottoscrittore l'accesso a tutto incondizionatamente e sarà probabilmente una fonte di bug orribili se questo deve essere usato da altri.

  2. from __main__ import *

    che non funziona nonostante definisca __all__ per includere il nome api alla fine di mainscript (mi viene appena detto che name 'api' is not defined quando provo a fare riferimento all'oggetto che voglio).

  3. from __main__ import api

    che mi dice cannot import name api .

Quindi mi trovo in una posizione in cui, o faccio lo scomodo import __main__ che non mi piace per niente, o devo spostare l'api in un altro file, cosa che non mi piace perché romperebbe l'intento struttura di:

mainscript.py
  - subdirectory:
    - subscript:
      subscript.py

che, nonostante i file __init__.py che devono essere ovunque lungo la catena, è relativamente semplice con cui lavorare. Un api.py da qualche parte significherebbe che, per mantenere la semplicità, dovrei spostare mainscript.py e api.py nella loro sottodirectory e avere uno script chiamante dove mainscript.py usato per essere (uno script python, per mantenere le cose facilmente multipiattaforma, ma aggiunge semplicemente un altro script alla catena). Voglio mantenere tutto semplice ed evidente, ed è per questo che preferirei avere la semplice api all'interno dello script del chiamante master.

In sintesi: qual è il modo consigliato, se esiste, per esportare un oggetto api da uno script chiamante a script chiamati? Questo approccio all'esportazione di un'API è sbagliato?

    
posta mechalynx 22.10.2014 - 18:52
fonte

1 risposta

0

Trasforma l'API in un pacchetto Python e installalo. Quindi è fuori mano e la struttura delle directory degli script può rimanere così com'è.

    
risposta data 23.10.2014 - 10:51
fonte

Leggi altre domande sui tag