GVKun编程网logo

静态编译Python解释器?(python 静态编译)

17

在本文中,我们将给您介绍关于静态编译Python解释器?的详细内容,并且为您解答python静态编译的相关问题,此外,我们还将为您提供关于2.1.Python解释器、、aws安装python解释器、p

在本文中,我们将给您介绍关于静态编译Python解释器?的详细内容,并且为您解答python 静态编译的相关问题,此外,我们还将为您提供关于2.1.Python解释器、<编译原理 - 函数绘图语言解释器(3)解释器 - python>、aws 安装python解释器、pycharm终端解释器与Python解释器配置的知识。

本文目录一览:

静态编译Python解释器?(python 静态编译)

静态编译Python解释器?(python 静态编译)

我正在构建一个专用的嵌入式Python解释器,并希望避免依赖于动态库,因此我想改用静态库来编译解释器(例如,libc.a不编译libc.so)。

我还想静态链接Python标准库中所有的动态库。我知道可以使用来完成此操作Freeze.py,但是有没有一种替代方法可以一步完成呢?

答案1

小编典典

我发现了这一点(主要是关于Python模块的静态编译):

  • http://bytes.com/groups/python/23235-build-static-python-executable-linux

其中描述了用于配置的文件,位于:

<Python_Source>/Modules/Setup

如果此文件不存在,则可以通过复制来创建:

<Python_Source>/Modules/Setup.dist

Setup文件中包含大量文档,并且README源中随附的文件也提供了许多良好的编译信息。

我还没有尝试编译,但是我认为有了这些资源,尝试时我应该会成功。我将在此处发布结果作为评论。

更新资料

要获取纯静态的python可执行文件,还必须配置如下:

./configure LDFLAGS="-static -static-libgcc" CPPFLAGS="-static"

在启用这些标志的情况下进行构建后,您可能会收到许多有关“由于库不存在而重新命名”的警告。这意味着您没有Modules/Setup正确配置,需要:

a)像这样添加一行(在顶部附近):

*static*

(星号/星号为“静态”,星号不带空格)

b)取消注释您希望静态可用的所有模块(例如数学,数组等)

您可能还需要添加特定的链接器标志(如我在上面发布的链接中所述)。到目前为止,我的经验是这些库无需修改即可正常工作。

如下运行make可能也会有所帮助:

make 2>&1 | grep ''renaming''

这将显示由于静态链接而无法编译的所有模块。

2.1.Python解释器

2.1.Python解释器

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

小结

Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

本教程的所有代码只确保在CPython 3.x版本下运行。请务必在本地安装CPython(也就是从Python官方网站下载的安装程序)。

感觉本站内容不错,读后有收获?

我要小额赞助,鼓励作者写出更好的教程

还可以分享给朋友

分享到微博

<编译原理 - 函数绘图语言解释器(3)解释器 - python>

<编译原理 - 函数绘图语言解释器(3)解释器 - python>

<编译原理 - 函数绘图语言解释器(3)解释器 - python>

  • <编译原理 - 函数绘图语言解释器(1)词法分析器 - python>

  • <编译原理 - 函数绘图语言解释器(2)语法分析器 - python>

背景

  • 编译原理上机实现一个对函数绘图语言的解释器 - 用除 C 外的不同种语言实现

  • 设计思路:

    • 将语法分析器并入绘图功能

    • 继承语法分析器覆盖重写

  • 用 Pycharm 写了一个.py 文件:

    • semanticfunc.py

    • 输入流是语法分析器得到的语法树,输出流是绘制的图像

    • 测试文本序列:

//----------------测试程序1:分别测试------------------------
ORIGIN IS (100,300);                        // Sets the offset of the origin
ROT IS 0;                                   // Set rotation Angle.
SCALE IS (1,1);                             // Set the abscissa and ordinate scale.
FOR T FROM 0 TO 200 STEP 1 DRAW (T,0);      // The trajectory of the x-coordinate.
FOR T FROM 0 TO 150 STEP 1 DRAW (0,-T);     // The trajectory of the y-coordinate.
FOR T FROM 0 TO 120 STEP 1 DRAW (T,-T);     // The trajectory of the function f[t]=t.
FOR T FROM 0 TO 2*PI STEP PI/50 DRAW(COS(T),SIN(T));
//---------测试程序2----------
ORIGIN IS (20, 200);
ROT IS 0;
SCALE IS (40, 40);
FOR T FROM 0 TO 2*PI STEP PI/50 DRAW (T, -SIN(T));
ORIGIN IS (20, 240);
FOR T FROM 0 TO 2*PI STEP PI/50 DRAW (T, -SIN(T));
ORIGIN IS (20, 280);
FOR T FROM 0 TO 2*PI STEP PI/50 DRAW (T, -SIN(T));
//-----------------测试程序3--------------
ORIGIN IS (380, 240);
SCALE IS (80, 80/3);
ROT IS PI/2+0*PI/3 ;
FOR T FROM -PI TO PI STEP PI/50 DRAW (COS(T), SIN(T));
ROT IS PI/2+2*PI/3;
FOR T FROM -PI TO PI STEP PI/50 DRAW (COS(T), SIN(T));
ROT IS PI/2-2*PI/3;
FOR T FROM -PI TO PI STEP PI/50 DRAW (COS(T), SIN(T));
//-------------------测试程序4-------------
ORIGIN IS(580, 240);
SCALE IS (80, 80);
ROT IS 0;
FOR T FROM 0 TO 2*PI STEP PI/50 DRAW(COS(T),SIN(T));
FOR T FROM 0 TO PI*20 STEP PI/50 DRAW((1-1/(10/7))*COS(T)+1/(10/7)*COS(-T*((10/7)-1)),(1-1/(10/7))*SIN(T)+1/(10/7)*SIN(-T*((10/7)-1)));
//-------------------测试程序5------------
//------------ 函数复杂度图形:-----------
ROT IS 0;	-- 不旋转
ORIGIN IS (50, 400);	-- 设置新原点(距系统默认原点的偏移量)
SCALE IS (2,1);	-- 设置比例
FOR T FROM 0 TO 300 STEP 1 DRAW (T,0);	-- 横坐标
FOR T FROM 0 TO 300 STEP 1 DRAW (0,-T);	-- 纵坐标
SCALE IS (2,1);	-- 设置比例
FOR T FROM 0 TO 300 STEP 1 DRAW (T,-T);	-- 函数F(T)=T的轨迹
SCALE IS (2,0.1);	-- 设置比例
FOR T FROM 0 TO 55 STEP 1 DRAW (T,-T*T);	-- 函数F(T)=T*T的轨迹
SCALE IS (10,5);	-- 设置比例
FOR T FROM 0 TO 60 STEP 1 DRAW (T,-SQRT(T));	-- 函数F(T)=SQRT(T)的轨迹
SCALE IS (20,0.1);	-- 设置比例
FOR T FROM 0 TO 8 STEP 0.1 DRAW (T,-EXP(T));	-- 函数F(T)=EXP(T)的轨迹
SCALE IS (2,20);	-- 设置比例
FOR T FROM 0 TO 300 STEP 1 DRAW (T,-LN(T));	-- 函数F(T)=LN(T)的轨迹

Step 1 :semanticfunc.py - 继承语法分析器并入绘制功能

#!/usr/bin/env python
# encoding: utf-8
	''''''
@author: 黄龙士
@license: (C) Copyright 2019-2021,China.
@contact: iym070010@163.com
@software: xxxxxxx
@file: semanticfunc.py.py
@time: 2019/11/30 10:47
@desc:
	''''''

import parserfunc as pf
import scannerclass as sc
import numpy as np
import turtle
import sys
import matplotlib
import matplotlib.pyplot as plt

class semantic(pf.Parsef):
    def initPaint(self):    # 初始化画布
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(111)

    def Errmsg(self):   #出错处理
        sys.exit(1)

    def CalcCoord(self,x,y):    # 计算点坐标   即比例旋转平移变换 x,y都是二元组
        x = x * self.Scale_x
        y = y * self.Scale_y     ## 进行比例变换
        tmp_x = x * np.cos(self.Rot_angle) + y * np.sin(self.Rot_angle)
        y = y * np.cos(self.Rot_angle) - x * np.sin(self.Rot_angle)
        x= tmp_x        ## 旋转变换
        x = x + self.Origin_x
        y = y + self.Origin_y   ## 进行平移变换
        return x,y


    def DrawLoop(self):
        x,y = self.CalcCoord(self.x_ptr,self.y_ptr)
        self.ax.scatter(x,y)


    def Statement(self):    ## 重写statement ,让每次ForStatement执行完毕后画图
        self.enter("Statement")
        if self.token.type == sc.Token_Type.ORIGIN:
            self.OriginStatement()
        elif self.token.type == sc.Token_Type.SCALE:
            self.ScaleStatement()
        elif self.token.type == sc.Token_Type.ROT:
            self.RotStatement()
        elif self.token.type == sc.Token_Type.FOR:
            self.ForStatement()
            self.DrawLoop()
        # elif self.token.type == sc.Token_Type.CONST_ID or self.token.type == sc.Token_Type.L_BRACKET or \
        #     self.Expression()
        else:   self.SyntaxError(2)
        self.back("Statement")

    # 绘图语言解释器入口(与主程序的外部接口)
    def Parser(self):  # 语法分析器的入口
        self.enter("Parser")
        if (self.scanner.fp == None):  # 初始化词法分析器
            print("Open Source File Error !\n")
        else:
            self.FetchToken()  # 获取第一个记号
            self.Program()  # 递归下降分析
            plt.show()
            self.scanner.CloseScanner()  # 关闭词法分析器
            self.back("Parser")

Step 2 :semanticmain.py - 解释器主函数入口

#!/usr/bin/env python
# encoding: utf-8
''''''
@author: 黄龙士
@license: (C) Copyright 2019-2021,China.
@contact: iym070010@163.com
@software: xxxxxxx
@file: parsermain.py
@time: 2019/11/26 22:31
@desc:
''''''

import scannerfunc as sf
# import parserfunc as pf
import semanticfunc as paint
import os

file_name = ''test.txt''
scanner = sf.scanner(file_name)
semantic = paint.semantic(scanner)
semantic.initPaint()
semantic.Parser()
# parser = pf.Parsef(scanner)
# parser.Parser()

# os.system("pause")

实现结果

  • 对于测试程序(1):

  • 对于测试程序(2):

  • 对于测试程序(3):

  • 对于测试程序(4):

  • 对于测试程序(5):

aws 安装python解释器

aws 安装python解释器

本文转载自 https://gist.github.com/niranjv/f80fc1f488afc49845e2ff3d5df7f83b

由于Amazon Linux中预装的Python版本为2.7,该脚本教程很好地解决了在Amazon Linux中安装Python3.6的需求,遂转发记录至此。

# install pre-requisites
sudo yum -y groupinstall development
sudo yum -y install zlib-devel
sudo yum -y install openssl-devel
# Installing openssl-devel alone seems to result in SSL errors in pip (see https://medium.com/@moreless/pip-complains-there-is-no-ssl-support-in-python-edbdce548852)
# Need to install OpenSSL also to avoid these errors wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2l.tar.gz tar -zxvf OpenSSL_1_0_2l.tar.gz cd openssl-OpenSSL_1_0_2l/

 

./config shared
make
sudo make install
export LD_LIBRARY_PATH=/usr/local/ssl/lib/

 

cd ..
rm OpenSSL_1_0_2l.tar.gz
rm -rf openssl-OpenSSL_1_0_2l/

 

# Install Python 3.6
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz tar xJf Python-3.6.0.tar.xz cd Python-3.6.0

 

./configure
make
sudo make install

 

cd ..
rm Python-3.6.0.tar.xz sudo rm -rf Python-3.6.0

 

# Create virtualenv running Python 3.6
sudo pip install --upgrade virtualenv
virtualenv -p python3 MYVENV
source MYVENV/bin/activate

 

python --version
# Python 3.6.0

pycharm终端解释器与Python解释器配置

pycharm终端解释器与Python解释器配置

1、pycharm终端运行

pycharm终端运行的时候前面带有PS,是什么意思,怎么变成cmd?

PS表示pycharm用的终端是powershell.exe,如果需要转换为cmd.exe则可以通过以下实现:

1)File——settings

 2)tools——terminal——shellPath

将终端路径由powershell修改成cmd.exe即可 

2、pycharm怎么切换不同的Python解释器?

1)File——settings

2)project——Python interpreter

在右边里面会显示所有的Python解释器,选择后,点击OK即可完成解释器的切换

3、解释器切换成功

解释器切换成功了,但是运行却还是报错,好像运行的时候没有运行指定的解释器?

在一个py文件中,右键后选择如下操作,将运行解释器模式由指定解释器修改为和项目解释器一样

总结:

到此这篇关于pycharm终端解释器与Python解释器配置的文章就介绍到这了,更多相关 Python解释器 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • Windows系统下实现pycharm运行.sh文件(本地运行和打开服务器终端)
  • Pycharm安装scrapy及初始化爬虫项目的完整步骤
  • PyCharm Terminal终端命令行Shell设置方式

关于静态编译Python解释器?python 静态编译的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于2.1.Python解释器、<编译原理 - 函数绘图语言解释器(3)解释器 - python>、aws 安装python解释器、pycharm终端解释器与Python解释器配置的相关信息,请在本站寻找。

本文标签: