求帮助, 无法使用同事的项目, Python 移动项目后导入失效

查看 104|回复 6
作者:Vcide   
大家好,最近在处理 Python 相关的项目的时候遇到了问题,希望可以请教一下大家. 我希望将同事写好的项目放入我的项目 a 中使用, 假设他的项目称之为 b,于是我直接将其放入我项目的根目录下, 简化后的项目结构如下:
.
├── __init__.py
├── b
│   ├── __init__.py
│   ├── config.py
│   └── process.py
└── main.py
其中 main.py 为
from b.process import process
if __name__ == '__main__':
    process()
config.py:
PDF_FILE = 'apc.pdf'
process.py
from config import PDF_FILE
def process():
    print('Processing PDF file:', PDF_FILE)
if __name__ == '__main__':
    process()
之后我从根目录(b 的父目录, main.py所在的文件夹)运行了
python main.py
出现了 Error
Traceback (most recent call last):
File "/Users/xxx/a/main.py", line 1, in
from b.process import process
File "/Users/xxx/a/b/process.py", line 1, in
from config import PDF_FILE
ModuleNotFoundError: No module named 'config'
之后我从我项目(项目 a)的父目录中运行
python -m a.main
依然会有一样的错误.
如何解决这种情况呢, 我知道将 b\process.py中的 from config import PDF_FILE 改为 from .config import PDF_FILE 避免上面的错误. 但是实际中的 b 是一个非常复杂的项目, 有着很多导入和很多层级, 有没有办法不用一个个全部改成相对导入, 或者有什么自动化的工具可以完成这个动作呢? 抑或是还有更好的处理方法?

Python, pdf_file, import, Process

itskingname   
把 b 文件夹的绝对路径,加到环境变量 PYTHONPATH 里面。
cunjuefafafa   
import sys
sys.path.append('b 的绝对路径')
之后 a 下面的文件夹要避免与 b 的文件夹重名
Vcide
OP
  
@cunjuefafafa 谢谢回复您的回复, 确实可以!
song135711   
export PYTHONPATH='.'
Vcide
OP
  
@song135711 请问这样做的话会不会导致命名空间会乱掉, 因为最后要做容器化在生产环境跑.
julyclyde   
@Vcide 我觉得如果你不把 b 改成相对导入的话,即使本次没遇到命名空间冲突的问题,将来也会遇到,这是无穷尽的维护代价
python 语言没有把新特性作为强制而是向后兼容,导致了无法把新的好处强制交给用户
您需要登录后才可以回帖 登录 | 立即注册

返回顶部