python executeable wrappen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

hallo schlangenbeschwoerer,

eine frage tut sich bei mir auf...

ich will mein projekt veroeffentlichen und dafuer sollen beim programstart mehrere module geladen werden damit wichtige befehle im interpreter verfuegbar sind.
ist fuer uebrigens unix...

ich habe ein csh script:

Code: Alles auswählen

#!/usr/bin/env csh

source environment.csh

python $*
ich tendiere dazu die letzte zeile mit

Code: Alles auswählen

python 'from my_modules import *' $*
ersetzen. natuerlich sollen alle anderen parameter an meine software weitergegeben werden, deswegen der .
so gehts nicht. weiss jemand alternativen?

ich bin mir sicher dass jemand eine idee hat.

gruss!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nochmal langsam zum mitschreiben: Du willst Module laden, die dann fuer alle anderen Module verfuegbar sind und das vor dem Start? Das geht so nicht.

Die saubere Alternative #1 is das in dein Programm einzubauen. Saubere Alternative #2 ist die Module deinem Programm als Parameter zu uebergeben.

Vllt koenntest du noch etwas mehr auf deine Absicht eingehn?
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

hi cofi, danke fuer die antwort!

dem benutzer sollen wichtige funktionen wie das einlesen von files usw. gleich zu verfuegung stehen ohne dass er noch extra ein

Code: Alles auswählen

from my_module.io import fileRead 
tippseln soll.

allerdings soll der user die moeglichkeit haben eigene scripte zu starten koennen.
also sowas wie

Code: Alles auswählen

projectName myCustomScript.py
es ist eine software fuer biologen die sich nicht gerne mit eigenheiten der programiersprache rumaergern wollen.

zur alternative #1:
ja, das muss irgendwie eingebaut werden, nur wie?

zur alternative #2:
ja, das habe ich ja mit

Code: Alles auswählen

python 'from my_modules import *' $*
angedacht, allerdings geht das so nicht...

hat jemand alternative #3 zur hand? :idea:
BlackJack

@thomas15: Jemand der sich nicht mit Programmiersprachen herumärgern will, soll halt die Finger von Programmiersprachen lassen. ;-)

Mal im Ernst, wenn sie es nicht hinbekommen notwendige Module zu importieren sollten sie vielleicht wirklich nicht programmieren. Das was Du vorhast ist IMHO zu viel Magie um "pythonisch" zu sein.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich habe es noch nicht so ganz verstanden: Ist das eine Art interaktiver Interpreter oder wird der von Python benutzt? Was heisst zur Verfuegung stehen? Und warum kann das Programm das nicht laden, warum muss das nebenher laufen?

Nein mit Alternative #2 meinte ich sowas der Art:

program.py

Code: Alles auswählen

...
def main(args, namespace):
    #solve world's problems
    ...
frontend.py

Code: Alles auswählen

import my_modules
import program
import sys

program.main(sys.argv, my_modules)
Shell

Code: Alles auswählen

python frontend.py
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

es soll eben beides sein, ein interaktiver interpreter wo der biolog an seinen daten rumspielen kann.
ebenso soll der bio mensch scripte ausfuehren koennen die man ihm vorgegeben hat und die er nur ein wenig modifizieren musste.

@ cofi
ja, ich glaube du hast mich auf eine idee gebracht.

@ blackjack
ueblicherweise sind menschen faul und wollen mit dem wenigsten aufwand das maximale ergebnis rausholen. deshalb ist es einfach nur benutzerfreundlich wenn der user nicht wissen muss wo er die funktionen findet sondern diese einfach benutzen kann. kurze einarbeitung = schnelle ergebnisse = wiederholte benutzung = gluecklicher benutzer
dem normalen menschen da draussen ist es egal obs pythonisch, rubisch oder was auch immer ist...

danke schonmal!
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Also ich bin mir nicht sicher, aber suchst du sowas wie

Code: Alles auswählen

python -i -c "from mymodule import a"
Dadurch wird erst der Code in den Anführungszeichen ausgeführt, dann wechselt der Interpreter in den interaktiven Modus.
Alternativ

Code: Alles auswählen

python -i myscript.py
(in myscript.py stehen dann die Importe etc.)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nur laesst sich das nicht mit einer weiteren Datei kombinieren:

Code: Alles auswählen

%> echo "print bar" > tmp/test.py
%> python -c "print 'foo'" tmp/test.py
foo
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

danke fuer euere tollen vorschlaege, ich bin mir sicher dass ich mir daraus was basteln kann!

gruesse und danke!
:D
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich vermute, du willst in etwa so etwas wie es IPython z.B. für pylab und scipy macht.
EDIT: Nennt sich IPython Profiles.
Antworten