jvk*_*sch 29 python relative-path python-packaging
我有一个Python模块,它使用模块目录的子目录中的一些资源.在搜索堆栈溢出并找到相关答案后,我设法通过使用类似的东西将模块引导到资源
import os
os.path.join(os.path.dirname(__file__), 'fonts/myfont.ttf')
Run Code Online (Sandbox Code Playgroud)
当我从其他地方调用模块时这很好用,但是当我在更改当前工作目录后调用模块时,它会中断.问题是内容__file__是一个相对路径,没有考虑到我更改目录的事实:
>>> mymodule.__file__
'mymodule/__init__.pyc'
>>> os.chdir('..')
>>> mymodule.__file__
'mymodule/__init__.pyc'
Run Code Online (Sandbox Code Playgroud)
如何__file__编写绝对路径,或者禁止如何访问模块中的资源,无论当前工作目录是什么?谢谢!
lun*_*orn 50
将模块目录的绝对路径存储在模块的最开头:
package_directory = os.path.dirname(os.path.abspath(__file__))
Run Code Online (Sandbox Code Playgroud)
然后,根据以下内容加载资源package_directory:
font_file = os.path.join(package_directory, 'fonts', 'myfont.ttf')
Run Code Online (Sandbox Code Playgroud)
毕竟,不要修改当前工作目录等进程范围的资源.从来没有真正需要在编写良好的程序中更改工作目录,从而避免os.chdir().
| 归档时间: |
|
| 查看次数: |
10995 次 |
| 最近记录: |