Python 板


LINE

汝题,小弟有个研究目前卡在一个小地方,就是小弟目前是希望每个 import 的 module 都能先经过某一些修改操作之後再执行 (import),但是小弟遍尝试了网路上的各种宣称 能模拟内建找寻 module 的方法之後都还是有些缺陷,所以想请问专业的各位, 我是想覆写内建的 builtins.__import__ 方法,在执行之前先拦截系统帮我们找好的 module,我修改之後再执行,简单来说不要让这个 module 被执行两遍,该如何做? 因为事关研究,如果尝试了解答者的做法之後确实成功,我会给予至少 3000P 以上的 高额酬劳。穴穴大家! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.16.166 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1596620348.A.3BF.html
1F:推 ddavid: 试试参考这篇下面回答的做法?据回答者所说,限定Python 08/05 19:25
2F:→ ddavid: 3.5+。 08/05 19:25
3F:→ ddavid: https://bit.ly/33uEGv6 08/05 19:25
4F:→ ddavid: 不过我没听很懂你所谓不要执行两次的意思,原本import机 08/05 19:27
5F:→ ddavid: 制就有挡重复载入,如果上面方法不合你需求那可能问题要 08/05 19:27
6F:→ ddavid: 更明确给个例子 08/05 19:27
7F:推 ddavid: 你说找过某些方法都有缺陷,那也应该简单讲一下找到的方 08/05 19:32
8F:→ ddavid: 法跟不合你用的地方在哪,不然到时大家一直回都是你找过 08/05 19:32
9F:→ ddavid: 不合用的方法,岂不浪费彼此时间XD 08/05 19:32
10F:→ alan23273850: 这篇我当然是看过的了XD 就是因为里面的做法在某些 08/05 21:12
11F:→ alan23273850: 妈九就是找不到,但内建的__import__却又可以,我才 08/05 21:12
12F:→ alan23273850: 觉得很怪,之所以说不要两次是因为我目前是直接先 08/05 21:13
13F:→ alan23273850: 执行内建import,修改之後再执行一次,总共两遍, 08/05 21:13
14F:→ alan23273850: 但是某些没有source的module因为不能修改就只执行一 08/05 21:13
15F:→ alan23273850: 次,这样疑似造成某个妈九会有circular import问题 08/05 21:14
16F:→ alan23273850: 才想问问有没有其他作法,就是找法要跟内建的import 08/05 21:14
17F:→ alan23273850: 一模一样的才行,我知道这个问题很难XD 08/05 21:14
18F:→ alan23273850: 而且你想想看,理论上本来不就是应该要提供使用者和 08/05 21:15
19F:→ alan23273850: 内建找法一样的function供使用才方便吗? 08/05 21:15
20F:→ alan23273850: 堂堂我大Python竟然连这点小功能都提供不出来像话吗 08/05 21:16
21F:推 TuCH: 不知道这个理论上是什麽理论? 有其他程式语言有提供这样的功 08/05 21:41
22F:→ TuCH: 能吗 08/05 21:41
23F:推 TuCH: 要跟内建找法一样的function 不是很懂 可以讲详细一点吗 08/05 21:57
24F:→ TuCH: 也说说你是哪个模组出问题 这样研究起来比较快 08/05 21:58
25F:推 ddavid: 没这种理论吧,有些语言是直接根本没有所谓的内建module啊 08/06 09:52
26F:推 ddavid: ,或是许多不支持Implicit declaration of functions皆如 08/06 09:58
27F:→ ddavid: 此 08/06 09:58
28F:推 ddavid: 老实说,除了少数Python完全不用import就能call的东西以外 08/06 10:18
29F:→ ddavid: ,其他不是大不了你就不要安装,完全写一个同名module就搞 08/06 10:19
30F:→ ddavid: 定了吗 08/06 10:19
31F:→ ddavid: 我觉得你还是得直接给出一个实例,不然根本搞不懂真正的问 08/06 10:20
32F:→ ddavid: 题在哪,弄半天大家都困在XY Problem里面浪费时间 08/06 10:20
33F:推 ddavid: 而且也看不出「找法要跟原本一模一样」的意思或必要性 08/06 10:26
34F:→ ddavid: 而一般会造成circular import的根本理由是程式架构出了问 08/06 10:28
35F:→ ddavid: 题,在你的说明里面也看不出为啥会需要发生交叉import XD 08/06 10:29
36F:→ alan23273850: 好吧,可能我的发问不够清楚,但是重新叙述又会很花 08/06 11:49
37F:→ alan23273850: 时间,这个问题我先自己再看看官网,如果到时候能切 08/06 11:49
38F:→ alan23273850: 成更小块的话我会再回文发问的 08/06 11:49
39F:推 TuCH: 修改底层很抖耶 不打算用任何套件? 08/06 13:47
40F:→ alan23273850: 简单来说,我就只是希望我找得到module<==>内建方法 08/06 15:50
41F:→ alan23273850: 也找得到那个module,这样而已,官方文件有提供 08/06 15:50
42F:→ alan23273850: importlib.util.find_spec(,)这个函式,不过他必须 08/06 15:51
43F:→ alan23273850: 要提供两个参数,第二个是base path,我看内建的 08/06 15:51
44F:→ alan23273850: __import__没有这种参数,才觉得怪,不然用find_spe 08/06 15:51
45F:→ alan23273850: c就好了 08/06 15:52
46F:→ alan23273850: 为什麽内建的__import__就不用提供find_spec的二参 08/06 16:14
47F:→ alan23273850: 我似乎快找到答案... 08/06 16:16
48F:推 ddavid: 内建的本来就不需要参数啊?因为它会从current directory 08/06 16:32
49F:→ ddavid: 、PYTHONPATH环境变数指定的目录、Python安装目录去找 08/06 16:33
50F:→ alan23273850: https://imgur.com/zrQXpPl 我现在想知道用内建的 08/06 16:39
51F:→ alan23273850: __import__和我手动呼叫的find_spec回传的结果差异 08/06 16:39
52F:→ alan23273850: Case1 相同:https://imgur.com/Lf7p57c 08/06 16:40
53F:→ alan23273850: Case2 相异:https://imgur.com/2WUmgFI 08/06 16:41
54F:→ alan23273850: 我现在不解的就是这个 Case 2,它用内建__import__ 08/06 16:42
55F:→ alan23273850: 是只会回传最高级的package,这个它官网上有写,但 08/06 16:42
56F:→ alan23273850: 是Case1和Case2的name给法都是有包含.的,那为什麽 08/06 16:42
57F:→ alan23273850: 会有差异?这我真的就不懂,才造成无法灵活地用find 08/06 16:43
58F:→ alan23273850: _spec去取代内建__import__ 08/06 16:43
59F:→ alan23273850: 好像是跟 fromlist 是不是空的有关 08/06 17:15
60F:→ alan23273850: 如果我最後有试出来我要的解答的话会回馈给板上的 08/06 17:17
61F:→ AndCycle: "Why does Python's __import__ require fromlist?" 08/06 18:04
62F:→ alan23273850: __import__(name, globals=None, locals=None, 08/06 18:17
63F:→ alan23273850: fromlist=(), level=0): blablabla 它给的标准格式 08/06 18:18
64F:→ AndCycle: 我的意思是你去google, stackoverflow 早就有人回答 08/06 18:18
65F:→ alan23273850: 喔喔,可是他那篇还是没写出怎麽用自己的实作取代掉 08/06 18:30
66F:→ alan23273850: 内建的__import__,我说finder的部分,loader我不管 08/06 18:31
67F:→ AndCycle: 扒 importlib 的 source code 看啊 ... 08/06 18:45
68F:→ uranusjr: 你都看得懂网路文章了, 直接写英文去 discc.python.org 08/07 11:26
69F:→ uranusjr: 问会比较容易得到答案, 这边问就算放酬劳也没什麽用 08/07 11:26
70F:→ s860134: 其实我比较好奇你想做什麽修改 08/07 21:34
71F:→ alan23273850: 送!我找到答案ㄌ,大家不用再为我操心了唷 08/08 10:41
72F:→ alan23273850: https://github.com/abarnert/floatliteralhack 08/08 10:42
73F:→ alan23273850: 答案就在楼上这一篇跟它readme里面所提到的文章罗! 08/08 10:43
74F:推 Yshuan: https://docs.python.org/2/library/imp.html 这个吗? 08/11 15:45







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP