manic Δημοσ. 1 Ιουλίου 2013 Δημοσ. 1 Ιουλίου 2013 Eφτιαξα μια εφαρμογη και θελω να την κανω publish στο ubuntu center το προβλημα μου ειναι οτι χρησιμοποιώ καποιες εικονες μεσα απο ενα φακελο και για της κανω insert στο προγραμμα εχω το εξης: "/home/user/projects/myapp/data/image.png" ομως αυτο θα πρεπει να το αλλαξω για να λειτουργει σωστα. τι θα πρεπει να βαλω ως path για καθε εικονα που χρησιμοποιώ
manic Δημοσ. 1 Ιουλίου 2013 Μέλος Δημοσ. 1 Ιουλίου 2013 Στις 1/7/2013 στις 6:35 ΜΜ, mad-proffessor είπε $HOME/blah/blah.png στο blah/blah τι θα πρεπει να βαλω γτ πχ οταν εχω: /home/manic/projects/flaggame/data/world_flag_game/hearts/alive.png και το αλλαζω σε $HOME/flaggame/data/world_flag_game/hearts/alive.png δεν δουλευει
firewalker Δημοσ. 1 Ιουλίου 2013 Δημοσ. 1 Ιουλίου 2013 Βάλε relative path. Αν για παράδειγμα το εκτελέσιμο τρέχει στον φάκελο flaggame βάλε ./data/world_flag_game/hearts/alive.png
mad-proffessor Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 Το ποιο σωστο είναι αυτό που λέει ο firewalker τώρα για το $HOME είναι το /home/user. Γράψε echo $HOME σε ένα prompt να δεις. Μεταβλητη περιβάλλοντος είναι, για να δεις ποιες άλλες μπορείς να χρησιμοποιήσεις δώσε σε ένα prompt env
manic Δημοσ. 2 Ιουλίου 2013 Μέλος Δημοσ. 2 Ιουλίου 2013 To προγραμμα ειναι γραμμένο σε python το θεμα ειναι οτι εκομα και εαν βαλω ./data/world_flag_game/hearts/alive.png εχω το εξης αποτελεσμα: πριν το κανω package (τρεχοντας το μεσα απο terminal ) δεν εχω κανενα προβλημα Οταν ομως το κανω package και το εγκαθιστώ, παω να το τρεξω μου κολαει στο εξης σημειο self.image_array = glob.glob('./data/world_flag_game/flags/*.png') self.length_of_list = len(self.image_array) self.first_rand = randint(1, self.length_of_list) με την ενδειξη οτι το self.length_of_list ειναι μικροτερο του 1, αρα λογικα δεν εχει διαβασει τα αρχεια .png
pmav99 Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 Τώρα άμα δε δούμε κώδικα πάμε λίγο στα τυφλά, αλλά δοκίμασε με κάτι τέτοιο import os .... current_directory = os.path.abspath(os.curdir) png_glob = os.path.join(current_directory, "./data/world_flag_game/flags/*.png")
mad-proffessor Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 στο περίπου τι θα κανείς: path="/path/to/images/dir" κάνεις import κάποια βιβλιοθηκη που διατρέχει το dir, νομίζω είναι os στη python dir=os.listdir(path) for i in dir δημιουργείς array και στη συνέχεια θα βάζεις ένα ένα τα αρχεία εικόνας μέσα στο πίνακα. Θα σου βγεί λιγο παραπάνω σε κώδικα αλλά θα δουλέψει ή μπορεί και να είναι έτοιμο αυτο που χρειάζεσαι το array μέσα απο την dir
imitheos Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 Χωρίς κώδικα όντως είναι δύσκολο να δοθεί δόκιμη λύση. Το πρόγραμμα σου θα είναι self-contained σε κάποιο path ? δηλαδή για παράδειγμα το binary στο /opt/manic/binary και οι εικόνες θα είναι στο /opt/manic/data/κτλ ή θα πάνε για παράδειγμα σε /usr/bin,/usr/share,/usr/lib/python,κτλ ? Αν όλα είναι μέσα σε ένα κοινό path τότε βολεύει να χρησιμοποιηθεί relative path όπως έχει προταθεί απλά με τις παρούσες λύσεις ίσως υπάρχει ένα πρόβλημα το οποίο φαίνεται παρακάτω: /tmp% cat oo.py #!/usr/bin/python import os current_directory=os.path.abspath(os.curdir) png_glob=os.path.join(current_directory, "./data/blah") print current_directory print png_glob /tmp% ./oo.py /tmp /tmp/./data/blahΒρίσκει ωραία ότι ο τρέχων κατάλογος είναι ο /tmp και κολλάει το path των εικόνων. Όσο τρέχουμε το πρόγραμμα μέσα από τον κατάλογό του θα παίζουν όλα τζάμι. Αν πάμε όμως να το τρέξουμε με full path από άλλο κατάλογο παίρνουμε /tmp% cd /home /home% /tmp/oo.py /home /home/./data/blahΤώρα ψάχνει αλλού τις εικόνες γιατί του είπαμε να ψάχνει στον τρέχοντα κατάλογο. Μια λίγο διαφορετική λύση είναι να χρησιμοποιεί το path του αρχείου. /home% cat /tmp/oo.py #!/usr/bin/python import os mybin=__file__ myfpath=os.path.abspath(mybin) # η realpath δεν είναι καλύτερη ? mydir=os.path.dirname(myfpath) myimg=os.path.join(mydir, "./data/blah") print mybin print myfpath print mydir print myimg /home% /tmp/oo.py /tmp/oo.py /tmp/oo.py /tmp /tmp/./data/blahΠαίρνει το όνομα του αρχείου που εκτελείται, το κάνει full path (άσχετα αν εδώ ήταν ήδη με full path), μετά κόβει το όνομα του καταλόγου και κολλάει εκεί το path των εικόνων. Σημειωτέον ότι δεν ξέρω python οπότε μπορεί να υπάρχει πιο εύκολος τρόπος. 1
pmav99 Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 Έτσι όπως τα λέει ο imitheos είναι. Εξαρτάται τι κάνεις, από που το κάνεις και που πάει τι. Η πρόταση του είναι σαφώς πιο robust. Αλλά πρέπει να δούμε folder structure για περισσότερα. Η διαφορά μεταξύ realpath και abspath έχει να κάνει με τη συμπεριφορά σχετικά με τα symbolic links. Λογικά, αν δεν έχεις να κάνεις με symbolic links δεν έχουν διαφορά. Δεν το έχω ψάξει περισσότερο. Για πιο εύκολες λύσεις σχετικά με τη διαχείριση paths θα πρέπει να πας σε 3rd party libraries όπως η pathlib. Υπάρχουν και άλλες στο pypi αλλά αναφέρω την pathlib γιατί ίσως μπει και στην standard library.
mad-proffessor Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 Αν θες να πάρεις οπωσδήποτε το home path του χρήστη στη python είναι έτσι: home=os.getenv("HOME"); Καλύτερα όμως να μπουν σε standard system paths.
pmav99 Δημοσ. 2 Ιουλίου 2013 Δημοσ. 2 Ιουλίου 2013 Υπάρχει και η expanduser http://docs.python.org/2/library/os.path.html#os.path.expanduser
manic Δημοσ. 3 Ιουλίου 2013 Μέλος Δημοσ. 3 Ιουλίου 2013 ευχαριστω παιδια για τις απαντησεις λογο ελειψης χρονου και επειδη ειναι προσωπικο project για χαβαλε το αναβαλω λιγο θα δοκιμασω αυτα που μου ειπατε και εαν δεν δουλεψει τπτ θα ξαναρωτήσω
manic Δημοσ. 7 Ιουλίου 2013 Μέλος Δημοσ. 7 Ιουλίου 2013 Τελικα την βρηκα την λυση για τον επομενο που θα προσπαθησει να κανει packaging με το quickly εχουμε και λεμε: Το quickly κανει εγκατασταση την εφαρμογη στο /usr/share/name_of_app by default (ή τουλ ετσι βλεπω εγω) αρα για καθε εικονα που θα φορτωθει θα πρεπει να εχω το εξης absolute path "/usr/share/flaggame/data/...."
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα