作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我的项目结构如下:
project
├── important.py
└── files
└── file1.py
import sys; sys.path.append("..")
from important import Important
from project.important import Important
# ModuleNotFoundError: No module named 'project'
# But it does work inside PyCharm (Why is that?)
from ..important import Important
# ValueError: attempted relative import beyond top-level package
__init__.py
,此错误仍会继续显示项目目录中的文件。
最佳答案
您需要在 sys.path
中引用父文件夹.这可以在代码中显式完成,就像您所做的那样,这并不是真正的 unpythonic。它也可以从代码外部完成,例如通过修改系统变量PYTHONPATH
或者通过在 python 中安装你的模块。
正如其他回复所建议的那样,我强烈建议不要使用绝对路径,因为那样的话,代码只能在您的机器上运行。这对于学生项目是可以容忍的,但在现实生活中的开发中这是不好的做法,因为需要多人一起工作,它会在测试/生产/沙箱服务器等上执行......
所以方法是正确的。但是,我仍然建议稍微修改您的语法,因为在某些情况下它不会按预期工作:
all_projects/
└── current_project/
├── important.py
└── files
└── file1.py
$ cd /path/to/all_projects/current_project/files/
$ python file1.py
#### > Ok, thanks to the line sys.path.append("..")
$ cd /path/to/all_projects/current_project/
$ python files/file1.py
#### > Ok, because python implicitly add the execution path to sys.path
$ cd /path/to/all_projects/
$ python current_project/files/file1.py
#### > ModuleNotFoundError: No module named 'important'
import sys, os
sys.path.append(os.path.dirname(sys.path[0]))
file1.py
甚至可以从另一个文件导入,以下更安全:
import sys, os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
_set_path
.原因是你可以在以后的文件中重用这个,如果你想修改代码架构,你只需要改变一个文件:
├── file1.py
├── file2.py
├── ...
└── _set_path.py
file1.py
, 您可以使用:
import _set_path
from important import Important
关于python - 如何从更深目录中的文件导入模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61322726/
我是一名优秀的程序员,十分优秀!