保护源码
pip install cython
验证安装是否成功
cython --version
hi.py
- # This is a sample Python script.
-
- # Press Shift+F10 to execute it or replace it with your code.
- # Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
-
-
- def print_hi(name):
- # Use a breakpoint in the code line below to debug your script.
- print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
-
-
- # Press the green button in the gutter to run the script.
- if __name__ == '__main__':
- print_hi('PyCharm')
-
- # See PyCharm help at https://www.jetbrains.com/help/pycharm/
hello.py
- def hello(name):
- print("hello " + name)
bye.py
- def bye(name):
- print("bye " + name)
setup.py
把需要转换的py文件都放进去
- from distutils.core import setup
- from Cython.Build import cythonize
- setup(ext_modules = cythonize(["hi.py", "hello.py", "bye.py"]))
terminal运行命令
python setup.py build_ext
运行log
- Compiling hi.py because it changed.
- Compiling hello.py because it changed.
- Compiling bye.py because it changed.
- [1/3] Cythonizing bye.py
- /home/huanglu/anaconda3/envs/segment-system/lib/python3.10/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/huanglu/Desktop/liubin/so-test/bye.py
- tree = Parsing.p_module(s, pxd, full_module_name)
- [2/3] Cythonizing hello.py
- /home/huanglu/anaconda3/envs/segment-system/lib/python3.10/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/huanglu/Desktop/liubin/so-test/hello.py
- tree = Parsing.p_module(s, pxd, full_module_name)
- [3/3] Cythonizing hi.py
- /home/huanglu/anaconda3/envs/segment-system/lib/python3.10/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/huanglu/Desktop/liubin/so-test/hi.py
- tree = Parsing.p_module(s, pxd, full_module_name)
运行结果
可以发现多了几个.c文件和build文件夹
build文件夹中
复制到根目录
在根目录里, 写一个demo.py
- from hi import print_hi
- from hello import hello
- from bye import bye
-
- print_hi("K.D.")
- hello("LeBron")
- bye("Kobe")
运行
- Hi, K.D.
- hello LeBron
- bye Kobe
-
- Process finished with exit code 0
把hi.py,hello.py,bye.py删除,再执行demo.py,可以得到同样的结果
即 此时已经使用到了.so文件,而不是原来的.py文件
如果.py在不同文件夹中,则在不同文件夹里面执行类似操作。
待续。。