Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Eφτιαξα μια εφαρμογη και θελω να την κανω publish στο ubuntu center το προβλημα μου ειναι οτι χρησιμοποιώ καποιες εικονες μεσα απο ενα φακελο και για της κανω insert στο προγραμμα εχω το εξης: "/home/user/projects/myapp/data/image.png" ομως αυτο θα πρεπει να το αλλαξω για να λειτουργει σωστα. τι θα πρεπει να βαλω ως path για καθε εικονα που χρησιμοποιώ 

 

 

Δημοσ.
  Στις 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 τώρα για το $HOME είναι το /home/user. Γράψε

echo $HOME

σε ένα  prompt να δεις. Μεταβλητη περιβάλλοντος είναι, για να δεις ποιες άλλες μπορείς να χρησιμοποιήσεις δώσε σε ένα prompt

env
Δημοσ.

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 

Δημοσ.

Τώρα άμα δε δούμε κώδικα πάμε λίγο στα τυφλά, αλλά δοκίμασε με κάτι τέτοιο

import os
....
current_directory = os.path.abspath(os.curdir)
png_glob = os.path.join(current_directory, "./data/world_flag_game/flags/*.png")
Δημοσ.

στο περίπου τι θα κανείς:

path="/path/to/images/dir"

κάνεις import κάποια βιβλιοθηκη που διατρέχει το dir, νομίζω είναι os στη python

dir=os.listdir(path)

for i in dir

δημιουργείς array και στη συνέχεια θα βάζεις ένα ένα τα αρχεία εικόνας μέσα στο πίνακα. Θα σου βγεί λιγο παραπάνω σε κώδικα αλλά θα δουλέψει ή μπορεί και να είναι έτοιμο αυτο που χρειάζεσαι το array μέσα απο την dir

Δημοσ.

Χωρίς κώδικα όντως είναι δύσκολο να δοθεί δόκιμη λύση. Το πρόγραμμα σου θα είναι 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 οπότε μπορεί να υπάρχει πιο εύκολος τρόπος.
  • Like 1
Δημοσ.

Έτσι όπως τα λέει ο imitheos είναι. Εξαρτάται τι κάνεις, από που το κάνεις και που πάει τι. Η πρόταση του είναι σαφώς πιο robust. Αλλά πρέπει να δούμε folder structure για περισσότερα.

 

Η διαφορά μεταξύ realpath και abspath έχει να κάνει με τη συμπεριφορά σχετικά με τα symbolic links. Λογικά, αν δεν έχεις να κάνεις με symbolic links δεν έχουν διαφορά. Δεν το έχω ψάξει περισσότερο.

 

Για πιο εύκολες λύσεις σχετικά με τη διαχείριση paths θα πρέπει να πας σε 3rd party libraries όπως η pathlib. Υπάρχουν και άλλες στο pypi αλλά αναφέρω την pathlib γιατί ίσως μπει και στην standard library.

Δημοσ.

Αν θες να πάρεις οπωσδήποτε το home path του χρήστη στη python είναι έτσι:

home=os.getenv("HOME");

Καλύτερα όμως να μπουν σε standard system paths.

Δημοσ.

ευχαριστω παιδια για τις απαντησεις λογο ελειψης χρονου και επειδη ειναι προσωπικο project για χαβαλε το αναβαλω λιγο θα δοκιμασω αυτα που μου ειπατε και εαν δεν δουλεψει τπτ  θα ξαναρωτήσω  :-)

Δημοσ.

Τελικα την βρηκα την λυση για τον επομενο που θα προσπαθησει να κανει packaging με το quickly εχουμε και λεμε:

 

Το quickly κανει εγκατασταση την εφαρμογη στο /usr/share/name_of_app by default (ή τουλ ετσι βλεπω εγω) αρα  για καθε εικονα που θα φορτωθει θα πρεπει να εχω το εξης absolute path

"/usr/share/flaggame/data/...."

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...