2012-04-13 1 views
0

J'essaie de charger une DLL en python, et je ne peux le faire que si j'entre le chemin absolu. Je voudrais utiliser un chemin relatif, ou des variables d'environnement. La seule chose qui fonctionne est si je spécifie le chemin exact (C: ...) j'ai même essayé d'obtenir la DLL pour construire directement dans le même dossier que le fichier py, il n'a toujours pas fonctionné.
Ce que je:python: impossible de spécifier le chemin relatif pour l'importation dll

MY_DLL = r'c:\full_path\output\Win32\Debug\my.dll' 
#MY_DLL = r'my.dll' #this doesn't work but it is what I want 
#MY_DLL = r'$(env_var)\dir\output\$(Platform)\$(Configuration)\my.dll' #this doesn't work either but would be good too  

aide?

+1

pourriez-vous utiliser 'os.path.expandvars' ? – mgilson

+0

Je l'ai fait à partir du chemin d'importation os MY_DLL = os.path.expandvars (r '$ (env_var) \ dir \ output \ $ (Plate-forme) \ $ (Configuration) \ my.dll') Mais il a montré qu'il essaie de charger exactement ce que j'ai mis après le = et ensuite NameError: 'os' n'est pas défini. Désolé, clueless .. Ai-je le mettre en droit? – Thalia

+1

essayez 'import os.path' à la place de' from import os path'. Vous pourriez aussi avoir besoin de changer $ (env_var) '' $ {env_var} '- je ne suis pas sûr. L'erreur de nom est parce que vous n'avez pas importé d'os, vous avez importé le chemin de l'os. (comme vous l'avez fait, os.path est connu dans votre espace de noms comme juste chemin) – mgilson

Répondre

1

Je ne sais pas CDLL sur les fenêtres ou vraiment beaucoup sur ctypes en général, cependant, vous pouvez manipuler des chemins assez facilement en utilisant os.path:

import os.path 
p1="path.dll" 
print (os.path.abspath(p1)) 
p2="${env_var}/path.dll" #Make sure you set env_var in the calling environment...Otherwise it won't be expanded... 
print (os.path.expandvars(p2)) 
Questions connexes