我创建了一个名为“播放器”的模块,该模块具有wav文件的子目录:
user/repositories/python_packages/playr/
|
|--__init__.py
|--sounds/
| |--sound1.wav
| |--sound2.wav
| |--sound3.wav
在我__init__.py
的函数中,应获取目录中所有文件的列表sounds/
以播放选定的声音:
from os import listdir
import os.path
import subprocess
def play(sound=0):
wav_files = listdir('sounds')
sound_file = os.path.join('sounds', wav_files[sound])
return_code = subprocess.call(['afplay', sound_file])
因为我想共享这个模块,所以我需要找到一种方法来获取sounds/
目录的路径,而无需对绝对路径进行硬编码。父目录user/repositories/python_packages/
包含在我的PYTHONPATH
变量中。
当前,当我尝试从其他目录中的python env使用该模块时,它看起来像这样:
from playr import play
play()
----------------------------------------------------------------
FileNotFoundError: [Errno 2] No such file or directory: 'sounds'
我知道它找不到sounds/
目录,因为它是在当前环境中而不是在模块中。我的问题是如何让我的功能在模块中而不是当前环境中查看。
到目前为止,我已经尝试了使用os.path
和的许多不同方法pathlib
。我也尝试了不同的使用方式module.__file__
任何帮助将不胜感激!
python 3.7+中的解决方案是importlib.resources
,或者importlib_resources
<3.7的反向端口:
# py 3.7
import os, subprocess
from importlib.resources import path
def play(sound=0):
with path('playr', 'sounds') as sounds_path:
sounds = os.listdir(sounds_path)
audio_file = os.path.join(sounds_path, sounds[sound])
return_code = subprocess.call(['afplay', audio_file])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句