总是搞不对 Python from import 路径的问题。。有什么比较优雅的解决方案

2023-08-17 10:47:08 +08:00
 yuhu96
每次搞起来这个就头痛。。

因为机器的原因,我们不方便用 pip 安装包,通常是把一些需要引用的第三方包直接搬到项目目录里,那里引用到他就放在对应的目录。现在的问题是一个项目中基本每层目录都有引用到。这下直接把一个工具包重复搬可太麻烦了,目录层级都看花了,调试起来四处出问题。有没有什么办法,我直接把工具包放在一个固定的路径,然后各层在 import 的时候都能直接引用,而且不需要在乎绝对路径或者相对路径(如 from ..A from .A 这种操蛋的写法)呢?
1037 次点击
所在节点    问与答
8 条回复
yingxiangyu
2023-08-17 10:49:38 +08:00
python setup.py install 把每个包手动装一下,不需要 pip ,或者直接放到 site-packages
TimePPT
2023-08-17 10:56:08 +08:00
这种情况参照下 PEP582 ? https://peps.python.org/pep-0582/
xiyou007
2023-08-17 11:00:22 +08:00
sys.path.append("xxxx") 之类的,
wliansheng
2023-08-17 11:00:41 +08:00
把工具包放到系统 path 里面
```python
import sys

sys.path.append('path')

# 然后直接 import 就行了
```
NoOneNoBody
2023-08-17 11:49:12 +08:00
无特定路径三方包就简单了

任意地方(当然需要权限可及)建个目录,假设这个目录绝对路径为/PathToPackage ,将所有包扔进去
写个 xxx.pth 文件,是个文本文件,就一行 /PathToPackage ,不需要任何包路径,就是这个目录而已
然后将这个 xxx.pth 扔进 site-packages 就是了

PS: 这种情况我没试过编译,不过看你的样子也不需要编译吧
标准做法肯定是认真写__init__.py 了,上面只是懒人方案
我自写的一些公共模块(多个项目使用),就是这样做的
volvo007
2023-08-17 12:21:26 +08:00
同 sys.path.append("xxxx")

这里有个 tip 是,如果你启用了 autopep 这种自动格式化的插件,他可能会把这一句放到所有引用的最后面导致引用失效

可以在这句话之后的其他所有 import 之后加 #noqa 注释来规避此问题
DigitalG
2023-08-17 14:26:55 +08:00
你能下载的第三方包( pypi 上那种?)都是打包好的吧。pip 支持从本地安装的(建议 pip 升级到最新)。
`python -m pip install -e ${path to the package}`

之后就正常 import 使用就好了
DigitalG
2023-08-17 14:30:20 +08:00
@DigitalG #7 上面这个"-e"是可编辑的意思,修源文件后 import 也会生效,调试比较方便。如果不需要的话,去掉-e 就是把本地下载的包复制到你的 python 目录里。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX