python代码库-如何保护我的Python代码库,以使访客看不到...

这篇博客探讨了在Python项目中如何保护敏感代码段,同时允许外部开发者使用公开版本的代码。作者考虑了两种方法:使用符号链接和维护两个独立的存储库。然而,这两种方法都存在管理复杂性和潜在的安全风险。对于符号链接,手动管理不便且可能引发授权问题;而两个存储库的方案则遇到Python模块导入的问题。作者寻求更优的解决方案来平衡代码的保密性和外部开发者的需求。
摘要由CSDN通过智能技术生成

我们正在Python中启动一个新项目,其中包含一些专有算法和我们想保密的敏感逻辑部分.我们还将有一些局外人(部分公众人士)来编写该代码.我们无法授予局外人访问较小的私人代码段的权限,但是我们希望公开版本的代码足以让他们使用.

假设我们的项目Foo有一个带有一个函数get_sauce()的模块bar. get_sauce()中真正发生的事情是秘密的,但是我们希望get_sauce()的公共版本返回可接受的(尽管不正确)结果.

我们还运行自己的Subversion服务器,因此我们可以完全控制谁可以访问什么.

符号链接

我的第一个想法是符号链接-而不是bar.py,向所有人提供bar_public.py,仅向内部开发人员提供bar_private.py.不幸的是,创建符号链接是繁琐的手动工作,尤其是当这些私有模块确实要有大约二十个时.

更重要的是,这使Subversion authz文件的管理变得困难,因为必须在服务器上添加要保护异常的每个模块.有人可能会忘记执行此操作,并且不小心检查了机密信息……然后,该模块位于存储库中,我们必须在没有存储库的情况下重建存储库,并希望外来者不要同时下载它.

多个存储库

下一个想法是要有两个存储库:

private

└── trunk/

├── __init__.py

└── foo/

├── __init__.py

└── bar.py

public

└── trunk/

├── __init__.py

└── foo/

├── __init__.py

├── bar.py

├── baz.py

└── quux.py

这个想法是,只有内部开发人员才能签出private /和public /.内部开发人员将设置其PYTHONPATH = private / trunk:public / trunk,但其他所有人都将设置PYTHONPATH = public / trunk.然后,内部人员和外部人员都可以从foo导入栏中获取正确的模块,对吗?

让我们尝试一下:

% PYTHONPATH=private/trunk:public/trunk python

Python 2.5.1

Type "help", "copyright", "credits" or "license" for more information.

>>> import foo.bar

>>> foo.bar.sauce()

'a private bar'

>>> import foo.quux

Traceback (most recent call last):

File "", line 1, in

ImportError: No module named quux

我不是Python专家,但似乎Python已经下定决心要对模块foo进行搜索,并进行相关的搜索:

>>> foo

甚至不删除foo都可以帮助:

>>> import sys

>>> del foo

>>> del sys.modules['foo']

>>> import foo.quux

Traceback (most recent call last):

File "", line 1, in

ImportError: No module named quux

您能为我提供更好的解决方案或建议吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值