2010-06-06 6 views
0

Je suis en train de développer une application python et j'ai une question concernant le codage pour qu'elle fonctionne toujours après l'installation d'un utilisateur sur sa machine via setup.py install ou similaire.accéder aux fichiers après l'installation de setup.py

Dans un de mes fichiers, j'utilise les éléments suivants:

file = "TestParser/View/MainWindow.ui" 
cwd = os.getcwd() 
argv_path = os.path.dirname(sys.argv[0]) 
file_path = os.path.join(cwd, argv_path, file) 

afin d'obtenir le chemin de MainWindow.ui, quand je ne connais le chemin par rapport à l'emplacement du script principal. Cela fonctionne indépendamment de l'endroit où j'appelle le script principal.

Le problème est qu'après l'installation d'une application sur son ordinateur, le chemin relatif est différent, donc cela ne fonctionne pas. Je pourrais utiliser __file__, mais selon this, py2exe n'a pas .

Existe-t-il un moyen standard d'y parvenir? Ou une meilleure façon?

EDIT:

Dois-je craindre même à py2exe et il suffit d'utiliser __file__? Je n'ai pas de plans immédiats pour utiliser py2exe, mais j'espérais apprendre le bon façon d'accéder aux fichiers dans ce contexte.

+0

Peut-être qu'il me manque quelque chose mais pourquoi votre installateur ne copie-t-il pas TestParser/* au même endroit que tout le reste? Les chemins relatifs doivent fonctionner quel que soit le lieu de vie de l'application tant que tous les chemins sont "relatifs" =) –

+0

@Dan McDougall Je suis toujours en train d'en apprendre plus sur le setup.py et les amis de python. dans le répertoire bin, alors que les modules sont stockés sous lib. C'est donc les scripts de ligne de commande qui sont stockés séparément de tout le reste. Je suppose qu'il existe une manière standard de mettre en place une distribution de projet dont je ne suis pas conscient. – Matthew

+0

duplicata possible? http://stackoverflow.com/questions/1219367/accessing-data-files-before-and-after-distutils-setuptools – Matthew

Répondre

1

Avec setup.py il n'y a jamais une réponse simple qui fonctionne pour tous les scénarios. Setup.py est un PITA énorme pour travailler avec différentes procédures d'installation (par exemple, "setup.py install", py2exe, py2app).

Par exemple, dans mon application, j'ai ce code pour trouver les fichiers nécessaires à l'application:

def getHome(): 
    if hasattr(sys, "frozen"): 
    if sys.platform == "darwin": # OS X 
     return os.path.join(os.path.dirname(os.path.dirname(sys.executable)), "Resources") 
    return os.path.dirname(sys.executable) 
    else: 
    return os.path.dirname(__file__) 

« gelé » est défini pour les applications créées avec py2exe et py2app. Pour répondre à votre question, utilisez __file__ et ne vous inquiétez pas pour py2exe. Si jamais vous avez besoin d'utiliser py2exe, vous aurez probablement besoin de créer un cas spécial de toute façon.

Questions connexes