1
billgreen1 2016-01-27 08:59:32 +08:00
或者你基于 sdk ,添加点东西,然后放到 pypi 上?
|
2
rwecho OP @billgreen1 那不行吧, 那不是别人的包吗? 如果是 C#(我本身是做.net 开发的)我可以把 dll 包含进来,然后在做修改,或者把源代码包含到项目中,再做修改,这样我就能修改我想要的功能,等发布的时候,它也被打包进最终的 exe 或 dll
|
3
strahe 2016-01-27 09:27:15 +08:00
别人的东西最好不要动,如果觉得有问题就自己写吧,因为毕竟要多台机器 pip install
|
5
tempdban 2016-01-27 10:05:30 +08:00 via Android
看准协议 能改就改啊
|
7
wmttom 2016-01-27 10:08:45 +08:00
使用前 monkey_patch 一下就好了。
|
8
Karblue 2016-01-27 10:10:04 +08:00
用第一种方法。 把改完后的 sdk 拷贝到和项目同级目录下.就不会 import site-package 里面的包了. 这样发布出去都能用了
|
9
janxin 2016-01-27 10:11:48 +08:00
猴子补丁一下
|
11
rwecho OP |
12
rwecho OP @janxin
@wmttom 好像猴子补丁就是针对这种情况的,但是我还是不清楚具体使用方法,能不能具体赐教下。 具体情况是这样的,我在调用 onedrivesdk 库, 而这个库里面有个 session.py 最后一个函数 load_session 中需要增加 @staticmethod 标识。 https://github.com/OneDrive/onedrive-sdk-python/issues/17 我现在已经手动改了{python_install_dir}\Lib\site-packages\onedrivesdk\session.py 文件,但是我觉得这对以后迁移到正式环境会有影响,所以才提出这个问题。 如果用猴子补丁,这种方式,我该怎么做? |
13
hcymk2 2016-01-27 10:53:49 +08:00
|
14
wmttom 2016-01-27 11:53:16 +08:00
@rwecho 比如先有个
class A(object):pass 想动态给 A 添加静态方法 load_session ```python import A def load_session(**load_session_kwargs): print(load_session_kwargs) A.load_session = staticmethod(load_session) ``` 类似逻辑放到一个函数里,一般会起名叫 monkey_patch_xxx 因为 python import 过的包就不会再 import ,所以把这个函数放到代码的入口处执行,之后相同的 import 实际用的也是你 patch 过的。 gevent 里面有很多 patch ,可以参考下。 |
17
latyas 2016-01-27 21:29:49 +08:00
建议改动小 或者增加功能可以用 monkey patch
否则改库 没什么的 |
18
neoblackcap 2016-01-28 01:27:16 +08:00
其实我想说,能不能继承然后再 override?
|
19
rwecho OP @neoblackcap 那样也可以,但是改动比较多,例如 session 替换了 SessionEx,那我要把所有引用 Session 的全部替换掉,还是 monkey patch 优雅 ^_^
我已经因为这个特性,被 python 给折服了,语言竟然可以这么灵活,不用一板一眼 |