Python和Django是编译代码吗?
我刚从 .net 背景转到 Python。
Python 是像 .net 那样编译的吗?如果是的话,它可以被混淆吗?相比于混淆过的 .net 编译代码,它的安全性是更高还是更低?
几乎每个网络主机(Unix 系统)都支持 Django 和 Python 吗?
7 个回答
你不需要担心让你的代码变得复杂难懂,特别是因为它是在你的服务器上运行的。
其实,你的代码不应该放在公开的目录里。用django的时候,正确的做法是让网络服务器能访问到你的代码,但普通人是看不到的。
如果你的服务器安全被破坏了,那你就有其他更重要的事情需要担心了……
我对安全方面不太了解,不过我可以说一些其他的。
- Python是一种解释型语言,跟PHP类似。也就是说,它会被转换成字节码,然后由CPython来读取。
- Django只是建立在Python基础上的一个框架。
- Python是可以被编译的。
- 并不是所有的主机都支持Python和Django。
Python语言有很多不同的实现方式,其中三个比较成熟、稳定,适合用在实际项目中的是CPython、IronPython和Jython。这些实现通常会把代码编译成一种叫做字节码的中间代码。你可以在需要的时候把源代码编译成字节码,也可以提前编译好。不过,像Google App Engine这样的服务,允许你免费运行小型Python网页应用(比如Django),但有个限制,就是你必须上传源代码,而不是编译后的代码(我不知道还有哪个主机有同样的限制,但我也没见过有哪个主机能提供这么多免费的资源;-)。
如果你对IronPython比较熟悉,那你就知道它是微软的产品(而且我相信这是微软第一个完全开源的产品)。所以你可以放心,它是“像.net那样编译的”,因为它确实是.net的一部分(更准确地说,是.net和Silverlight的一部分)。因此,它的代码混淆程度和安全性与其他.net语言是一样的。
Jython则是在Java虚拟机(JVM)上运行的,和IronPython在微软的公共语言运行时(CLR)上运行类似。CPython有自己专门的虚拟机。
为了完整性,还有一些其他的实现(目前不推荐用于生产环境),比如pypy,这是一个非常灵活的实现,支持多种后端(包括但不限于.net);unladen swallow,专注于让CPython变得更快;pynie,是一个将Python编译到Parrot虚拟机的项目;wpython,是基于“wordcode”而不是“bytecode”的重新实现;还有很多其他的实现。
CPython、IronPython、Jython和pypy都可以运行Django(其他实现可能也足够完整,但我不太确定)。