总是搞不对 Python from import 路径的问题。。有什么比较优雅的解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuhu96
V2EX    问与答

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

  •  
  •   yuhu96 2023-08-17 10:47:08 +08:00 1575 次点击
    这是一个创建于 834 天前的主题,其中的信息可能已经有所发展或是发生改变。
    每次搞起来这个就头痛。。

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

    sys.path.append('path')

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

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

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

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

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

    之后就正常 import 使用就好了
    DigitalG
        8
    DigitalG  
       2023-08-17 14:30:20 +08:00
    @DigitalG #7 上面这个"-e"是可编辑的意思,修源文件后 import 也会生效,调试比较方便。如果不需要的话,去掉-e 就是把本地下载的包复制到你的 python 目录里。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1032 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 23:36 PVG 07:36 LAX 15:36 JFK 18:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86