Пожалуйста, обратите внимание этот скрипт:Как я могу убедиться, что python находит необходимые файлы данных?
$ tree my_application
my_application
├── my_application
│ ├── sound.mp3
│ ├── __init__.py
│ ├── my_application.py
│ ├── my_application.pyc
│ └── __pycache__
│ ├── __init__.cpython-34.pyc
│ └── my_application.cpython-34.pyc
├── my_application.egg-info
│ ├── dependency_links.txt
│ ├── entry_points.txt
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── run.py
├── MANIFEST.in
└── setup.py
my_application.py
это скрипт, который просто играет sound.mp3
с помощью mplayer
:
class Sound():
def __init__(self):
self.cmd = ["mplayer", "sound.mp3"]
def play(self):
subprocess.Popen(self.cmd)
setup.py
Ваш классический файл setup.py, с console_script
в my_application:main
.
MANIFEST.in
содержит ссылку на sound.mp3
, чтобы убедиться, что он получает скопирована при запуске setup.py
:
include my_application/sound.mp3
global-exclude *.pyc
run.py
содержит небольшой фрагмент кода для запуска main()
функции my_application
:
from my_application import main
if __name__ == "__main__":
main()
Там в файл __init__.py
, так что функция main()
правильно показана на «выездах» язь мир:
from .my_application import main
__all__ = ["main"]
Теперь этот скрипт работает, когда я запускаю main()
функцию, находясь во внутреннем my_application
каталоге. Но как только функция запускается из другого места, например, запустив run.py
или с помощью сценария консоли, mplayer
жалуется, что не может найти sound.mp3
:
Cannot open file 'sound.mp3': No such file or directory
Как я могу убедиться, что mplayer
находит sound.mp3
, независимо от каталога я в?
Вы можете показать кусок кода, который нагружает 'sound.mp3' файл? –
Вы использовали относительный путь к 'sound.mp3', который действителен из скрипта, который находится в другом каталоге? Ошибка, которую вы описываете, звучит так же, как [эта проблема] (https://stackoverflow.com/questions/28346800/python-file-does-not-exist-error/28346955#28346955) здесь. –
@ DanielePantaleone: Конечно. Обновлено. OliverW: см. Обновление. Думаю, что да. –