Sviluppo di Python su Windows e distribuzione su Linux

5

Ho un cliente che preferirebbe ospitare la propria applicazione su Linux. Tuttavia, i miei colleghi e io abbiamo pochissima esperienza con Linux. Questo è un progetto breve con un budget basso, quindi fare scelte che risparmiano tempo e denaro non sono solo desiderati, sono un must. Siamo inoltre impegnati nell'integrazione e nell'automazione continue, molte delle quali sono già state comprese in Windows e possono essere riutilizzate da progetti precedenti. Detto questo, fare in modo che il team di sviluppo apprenda Linux e ricostruisca la nostra automazione in modo che possiamo sviluppare sullo stesso ambiente a cui intendiamo implementare, molto probabilmente non un'opzione praticabile. (Per un progetto più grande, forse, ma non questo.) Il team è abbastanza familiare con Python che scrivere l'applicazione in Python è un'opzione valida (anche se gran parte del nostro sviluppo è fatto in .NET. ), anche se avremmo bisogno di capire un buon meccanismo di packaging che può essere eseguito su Windows ed essere trasferito su una macchina Linux. Non prevedo di aver bisogno di librerie non disponibili su Windows. Molto probabilmente, avremo bisogno solo di psycopg e sqlalchemy in termini di librerie con componenti nativi.

Tutto ciò rende la nozione di avere sviluppatori che creano l'applicazione su Windows, la distribuzione in un ambiente di testing Linux, e quindi spingere alla produzione dopo test approfonditi sembrano un'opzione piuttosto allettante, ma sono scettico a riguardo. Linux e Windows sono sistemi operativi molto diversi, e sono preoccupato per i trucchi che potrebbero insinuarsi e rendere la vita molto difficile. Ci sono dei veri dubbi nel fare ciò (oltre le tipiche differenze nel percorso dei file e altre cose comuni facilmente risolte con buone pratiche di codifica)? Penso che molti provider di hosting condiviso stiano su Linux e non riesco a immaginare che tutti quelli che li usano si siano sviluppati su Linux negli ultimi tre anni. Questo è fatto più comunemente di quanto io sappia?

    
posta jpmc26 30.05.2013 - 01:42
fonte

2 risposte

11

Non so su Python, ma ho spostato le applicazioni Java da Windows a Linux e viceversa. Java rende il claim "scrivi una volta, esegui ovunque" che potrebbe non essere vero al 100%, ma con pochissimo lavoro sono riuscito a renderlo abbastanza vero (praticamente tutto funziona alla grande su Linux, alcuni problemi su Windows).

Userò W e L per Windows e Linux:

W: i file e le cartelle non fanno distinzione tra maiuscole e minuscole. L: maiuscole e minuscole. Metti alla prova la maiuscola dei nomi dei file con attenzione su Linux perché Windows nasconde questi problemi.

Windows ha un sistema di permessi file più granulare, che ti consente di utilizzare le intersezioni di vari gruppi e permessi. Linux ha un sistema più semplice di un gruppo e un utente per file o cartella. Più un bit di esecuzione. Bene, ci sono altre piccole cose come impostare il bit di esecuzione su una cartella rende le autorizzazioni a cascata come fanno in Windows rispetto all'essere impostato per l'utente e il gruppo che ha creato ciascun file come fanno di default in Linux. Questi problemi entrano in gioco principalmente quando zippano e decomprimono i file, ad esempio durante un'installazione.

W: le unità sono montate nella cartella radice come lettere. L: Le unità sono montate ovunque come qualsiasi cosa. Un singolo file può apparire in più punti nel tuo file system (symlink).

Separatore di cartelle: W: \ L: /

Separatore percorso: W:; L::

Fine della riga in un file di testo: W: \ r \ n L: \ n

Set di caratteri predefinito: W: ISO-8859-1 L: UTF-8

Devi sapere quale distribuzione Linux hai come target. Due aree di differenza sono come vengono gestiti gli script di avvio di System V e come vengono eseguite le attività di superutente (sudo vs su). Inoltre hai citato uno script di installazione. Apt e Yum sono popolari, ma è necessario lavorare con lo strumento utilizzato dalla distribuzione. Usa yum su RedHat, apt su Debian, ecc.

Questo è il motivo per cui è necessario un computer Linux per i test, sia esso virtuale o fisico. Deve usare la stessa esatta distribuzione che stai prendendo di mira. Qualcuno ha configurato un dual-boot su un vecchio server o qualcosa del genere. Raccomando inoltre vivamente cygwin per ogni sviluppatore. Le autorizzazioni per i file non sono le stesse di Linux, e puoi impostarle su maiuscole e minuscole (anche se è più insensibile alla distinzione tra maiuscole e minuscole in Windows), ma è un banco di prova abbastanza ragionevole.

Non ti fa male sapere entrambi (Windows e Linux) e una volta fatto, puoi fare una scelta informata su ciò che funziona meglio per te. Ero uno sviluppatore solo per Windows per i primi 10 anni della mia carriera. Sono stato quasi puramente Linux negli ultimi 4-6 anni, quindi alcune delle mie informazioni di Windows potrebbero essere vecchie. Continuo a eseguire Windows in una macchina virtuale per eseguire test su Internet Explorer.

Una cosa su cui ti abituerai velocemente su Linux è che puoi risolvere la maggior parte dei problemi cercando su Google il messaggio di errore. Il 90% degli strumenti della riga di comando ti dice come funzionano se digiti "man". Se davvero ne hai bisogno, la maggior parte del codice sorgente è facilmente disponibile, a seconda della distribuzione. Quando risolvo un problema in Linux, mi sento come se avessi imparato qualcosa su come funzionano davvero i computer. In Windows, mi sento come se continuassi a provare ciecamente roba finché qualcosa non funziona. Quando trovo la soluzione, sono fortunato a ricordare tutto ciò che ho provato, non meno sapere cosa significa tutto.

Quindi ti incoraggio a passare un po 'del tuo tempo ad imparare Linux e questo lavoro potrebbe essere un modo per essere pagato per una parte di questo apprendimento. Ma non confondere la tentazione per l'opportunità. Se il lasso di tempo è veramente breve, o il denaro è stretto, potresti dover dire che devi implementare ciò che sai (Windows) o non accettare il lavoro.

    
risposta data 30.05.2013 - 04:50
fonte
7

Codice Python

Non appena la tua applicazione è un uovo ben fatto, o un set di uova, e puoi facilmente distribuirlo in una virtualenv usando pip o easy_install , dovresti stare bene su qualsiasi piattaforma.

Cose a cui prestare attenzione:

  • Dipendenze di codice nativo. Potresti dipendere da alcune uova che includono questi (come psycopg); assicurati che tale uovo sia ugualmente supportato su Windows e Linux.
  • Percorsi di file. Assicurati di non utilizzare un "\" con codifica specifica in alcun luogo; usa sempre path.sep , path.join , ecc.
  • Nomi dei file. I filesystem Unix sono case-sensitive, quindi 'Foo' e 'foo' sono file differenti. Assicurati di conservare il caso dei nomi dei file.

Server di app

Molto probabilmente stai scrivendo un'app web. Parte di essa è solitamente non Python: il server web, i server DB, ecc. Le cose possono non essere come multipiattaforma: ad esempio, c'è una versione di Windows di nginx, ma non di uwsgi.

Mordi il proiettile

Anche se è possibile eseguire tutto il tuo sviluppo, test delle unità e parte dei test di integrazione, su Windows, non c'è modo di implementare la tua app su Linux.

Installa Linux in un VirtualBox o usa un VPS (Amazon AWS, DigitalOcean, ecc.). Prova a imitare l'ambiente di distribuzione target del tuo cliente il più vicino possibile.

Installare componenti non Python, come il server Web, memcached o qualsiasi altra piattaforma specifica, su quella macchina. Chiedi al tuo cliente di configurare queste cose per te se hanno opinioni forti su questo. Puoi mantenere Postgres e altre cose indipendenti dalla piattaforma dove preferisci.

Distribuire regolarmente sulla macchina Linux. Solitamente è solo ssh linux-machine , pip -U install <your-eggs> e, ad esempio, sudo service uwsgi restart . Non devi essere un amministratore di sistema esperto per far fronte a questo. Ma se impari qualcosa di Linux lungo la strada, assicurati che sarà utile in futuro.

    
risposta data 30.05.2013 - 05:49
fonte

Leggi altre domande sui tag