虽然豪尔赫的答案在某些情况下可能有效,但我建议您了解为什么您的答案无效,并看看其他人是如何解决这个问题的。让我们举一个非常简单的例子。
project
dir1
test.py
dir2
test2.py
假设我的项目目录的完整路径位于 /Users/sstacha/tmp/test_python/ 并且我的 2 个测试文件包含以下内容
test.py
import os
from pathlib import Path
from dir2.test2 import function2
def function1():
path = os.getcwd()
print(f"function1.os.cwd(): {path}")
DIR = Path(__file__).resolve()
print(f"function1.pathlib_path: {DIR}")
function1()
function2()
test2.py
import os
from pathlib import Path
def function2():
path = os.getcwd()
print(f"function2.os.cwd(): {path}")
DIR = Path(__file__).resolve()
print(f"function2.pathlib_path: {DIR}")
如果我从项目目录执行 python dir1/test.py,我会得到以下输出:
$ python dir1/test.py
function1.os.cwd(): /Users/sstacha/tmp/test_python
function1.pathlib_path: /Users/sstacha/tmp/test_python/dir1/test.py
function2.os.cwd(): /Users/sstacha/tmp/test_python
function2.pathlib_path: /Users/sstacha/tmp/test_python/dir1/dir2/test2.py
如果我改为 cd 到 dir1 并执行 python test.py 我得到这个输出:
$ python test.py
function1.os.cwd(): /Users/sstacha/tmp/test_python/dir1
function1.pathlib_path: /Users/sstacha/tmp/test_python/dir1/test.py
function2.os.cwd(): /Users/sstacha/tmp/test_python/dir1
function2.pathlib_path: /Users/sstacha/tmp/test_python/dir1/dir2/test2.py
所以你的实际问题是 os.cwd() 将始终设置为运行 python 命令时操作系统设置的任何目录。我还包含了 Django 设置文件如何为 python >= 3.4 处理此问题的一行。如您所见,这种方法将与定义您的函数的任何文件相关,无论从哪个目录调用 python 可执行文件,这应该是一个更好/更便携的解决方案。
希望这可以帮助您更好地了解您的问题以及可能对您有用的解决方案。
我意识到我从来没有真正完全回答过这个问题,这里就是一个例子:
DIR = Path(__file__).resolve().parent
image = Image.open(DIR+"/pictures/pic1.png")
顺便说一句,如果您使用的是 3.4 之前的版本,那么 Django 设置文件就是这样处理它的:
DIR = os.path.dirname(os.path.abspath(__file__))
image = Image.open(DIR+"/pictures/pic1.png")