包含arm版中是否有python的詞條

本文目錄一覽:

如何交叉編譯Python到ARM-Linux平台

編譯sqlite

先去 下載最新的sqlite源代碼,我這裡用的是3.5.6版本的。

我推薦使用amalgamation版本的源代碼,這個代碼只有幾個文件而已,編譯起來方便,而且據說 編譯器好的話,還可能編譯出更高效的代碼。 我下載的是

[plain]

view plaincopy

先運行以下幾步:

[plain]

view plaincopy

tar zxf sqlite-amalgamation-3.5.6.tar.gz

cd sqlite-3.5.6

./configure –host=arm-linux –prefix=/usr/local/arm/3.3.2 –enable-shared –disable-readline –disable-dynamic-extensions

以上是把sqlite解壓縮,然後做一些配置,這裡,我希望sqlite到時候安裝到/usr/local/arm/3.3.2里,要生成動態鏈接庫,不要readline,不要sqlite的動態擴展。

然後編輯Makefile,把CFLAG和CXXFLAG中的-g去掉,我們不用debug sqlite。

接下來就可以編譯和安裝sqlite了:

[plain]

view plaincopy

make

make install

這一步就完成了sqlite的編譯和安裝了。

編譯python

先去下載最新版本的python源代碼,我這裡下載的是:

[plain]

view plaincopy

先把python解壓縮:

[plain]

view plaincopy

tar jxf Python-2.5.1.tar.bz2

cd Python-2.5.1

編譯pc版本的語法解析器

由於在編譯python的時候,需要先編譯一個叫pgen的程序出來,用於生成語法解析器,所以我們要先生成一個pc版本的pgen:

[plain]

view plaincopy

mkdir build.pc

cd build.pc

../configure

make Parser/pgen

然後ls Parser一下,應該就能看到有pgen了。

修改configure

configure在檢測編譯器的printf是否支持%zd的時候,如果發現是在cross compile,就直接不幹活了。這還了得?

把這一部分的檢測代碼去掉。這段代碼起始於

[plain]

view plaincopy

echo “$as_me:$LINENO: checking for %zd printf() format support” 5

echo $ECHO_N “checking for %zd printf() format support… $ECHO_C” 6

if test “$cross_compiling” = yes; then

結束於

[plain]

view plaincopy

cat confdefs.h \_ACEOF

#define PY_FORMAT_SIZE_T “z”

_ACEOF

else

echo “$as_me: program exited with status $ac_status” 5

echo “$as_me: failed program was:” 5

sed ‘s/^/| /’ conftest.$ac_ext 5

( exit $ac_status )

echo “$as_me:$LINENO: result: no” 5

echo “${ECHO_T}no” 6

fi

rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext

fi

把這兩段以及中間的內容都刪除掉就可以了。

編譯arm版本的python

有了語法解析器,就可以開始編譯arm版本的python了。

[plain]

view plaincopy

mkdir ../build.arm

cd ../build.arm

../configure –prefix=/home/leojay/test/arm-system-working/rootfs –disable-ipv6 –host=arm-linux –enable-shared

先創建一個用於編譯的目錄build.arm,再對python做一些配置,如安裝目錄,不要ipv6,使用arm-linux的編譯器,生成動態鏈接庫。

修改Makefile

之後就要對Makefile做一些修改,把

[plain]

view plaincopy

OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes

一行中,去掉-g,我們不要debug python,-O3改為-O2,空間緊張O2就可以了。

[plain]

view plaincopy

PGEN= Parser/pgen$(EXE)

一行的下面加上

[plain]

view plaincopy

PGEN_HOST= ../build.pc/Parser/pgen$(EXE)

表明我們在HOST上運行的pgen

在要使用PGEN的地方改為PGEN_HOST:

[plain]

view plaincopy

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)

-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

改為:

[plain]

view plaincopy

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)

-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

修改所有使用新生成的python的地方。

所有如 ./$(BUILDPYTHON) 的地方,都改為python

如:

[plain]

view plaincopy

platform: $(BUILDPYTHON)

$(RUNSHARED) ./$(BUILDPYTHON) -E -c ‘import sys ; from distutils.util import get_platform ; print get_platform()+”-“+sys.version[0:3]’ platform

改為

[plain]

view plaincopy

platform: $(BUILDPYTHON)

$(RUNSHARED) python -E -c ‘import sys ; from distutils.util import get_platform ; print get_platform()+”-“+sys.version[0:3]’ platform

這種地方比較多,大家小心修改。

修改setup.py

setup.py負責編譯python的各個擴展模塊。但是,由於python完全沒有考慮cross compile,所以要做一些修改。

PyBuildExt類:

函數的前兩行是把/usr/local加到搜索目錄中,我們的cross compiler一般不會直接安裝在 /usr/local裡面的,所以這兩行去掉:

[plain]

view plaincopy

lib_dirs, inc_dirs的設定中,把中括弧里的那些都去掉。 以下所有模塊都不要:

這個函數在編譯了所有的extension後,會去load這些剛編譯好的extension, 但我們在i686的電腦上顯然不能load,所以要跳過這些操作。 在 build_ext.build_extension(self, ext)後面直接寫一個return,不做load。

for d in [‘/usr/local/arm/3.3.2/include’]

for d in inc_dirs + sqlite_inc_paths:

ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter

add_dir_to_list(self.compiler.library_dirs, ‘/usr/local/lib’)

add_dir_to_list(self.compiler.include_dirs, ‘/usr/local/include’)

build_extension函數:

detect_modules函數:

cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,

[plain]

view plaincopy

由於python本身的問題,現在ctypes還不能在除i386以外的機器上運行,所以ctypes也去掉 編譯sqlite的地方:

[plain]

view plaincopy

改為:

[plain]

view plaincopy

因為我的sqlite3安裝在這裡,如果這裡不改的話,setup.py會在我的電腦上找sqlite

main函數:

setup函數調用的時候,把要安裝的scripts那一部分去掉

之後就可以make make install了。

附上我修改後的 Makefile 和 setup.py 供大家參考

裁減python

python完全安裝後,實在是很大,所以,要把一些肯定用不上的庫去掉。 所以,再附上我的裁減腳本 cleanpy.sh

注意,由於我的python程序都運行在python -OO的參數下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,這個腳本會把所有的.py和.pyc都刪除掉。

大家可以根據自己的需要做調整。

什麼單片機可以跑python

Micro python 目前已經支持ARM系列單片機。

MCS-51單片機的邏輯部件,包括一個8位CPU及片內振蕩器、 80514B掩膜ROM、87514KBEPROM、8031無ROM。

特殊功能寄存 器SFR128BRAM、定時器/計數器T0及T1、並行I/O介面:P0、P1、P2、P3;串列介面:TXD、RXD;中斷系統:INT0,INT1。

擴展資料:

單片機也被稱為單片微控器,屬於一種集成式電路晶元。在單片機中主要包含CPU、只讀存儲器ROM和隨機存儲器RAM等,多樣化數據採集與控制系統能夠讓單片機完成各項複雜的運算,無論是對運算符號進行控制,還是對系統下達運算指令都能通過單片機完成。

單片機憑藉著強大的數據處理技術和計算功能可以在智能電子設備中充分應用。簡單地說,單片機就是一塊晶元,這塊晶元組成了一個系統,通過集成電路技術的應用,將數據運算與處理能力集成到晶元中,實現對數據的高速化處理。

參考資料來源:百度百科-單片機

有哪位大神嵌入式ARM中移植python的庫,求助啊

我沒弄過ubuntu下的graphics.py。

但是弄過windows下的。

1. apt是用來安裝Ubuntu系統的軟體的。

2. Python是Ubuntu下面的一個軟體。

3. 而graphics.py屬於python中的第三方庫函數。

所以,即使用apt,也是用apt去安裝,更新python。

而python中的庫,有自己的安裝方法。

常見的是直接 setup.py install或者用pip之類的去安裝。

具體安裝的方法,自己去參考這個:

【待完善】【總結】Python安裝第三方的庫、package的方法

(此處不給貼地址,請用baidu搜標題,即可找到帖子地址)

python 移植到 arm 需要什麼條件

如果arm下面的平台是Linux,那麼可以直接安裝。不過如果你需要通過python操作底層硬體,那麼你需要自己編寫一個模塊去實現

如果arm下面是別的操作系統,或者是裸機,那麼需要把python源代碼重新進行編譯,使用方法需要根據你的軟體進行結合,這會比較麻煩

arm可以用python編程嗎

不可以吧,沒聽說過這種應用。python語言是高級語言,是面向對象的,比較複雜。像arm這種操作寄存器的,一般用C語言比較低級的語言操作硬體。你想再arm上應用python語言寫的應用程序,必須是在arm上加了系統,然後這個操作系統可以解析python語言(裝解析軟體。)。

python| 2021款 m1pro mbp python開發配置

m1m1pro 如何吊打老款 Intel mbp 就不多提了(發布會不點名, 以 友商 代稱, 但是官網直接放具體型號, 這操作真6)

簡單列一下2個重要的使用感受(2021 16寸 標配):

16寸標配與14寸標配3個重要區別:

由於 m1pro 採取 ARM 架構(ISA, 指令集架構, 詳見上一篇blog: 極客時間-計組學習筆記一), 需要安裝 ARM版/M1版 軟體才能運行

查看 python官網 可知, ARM版python最低版本為 3.8 :

由於項目使用了 python3.6 版本, 根據 開發環境/測試環境應盡量和線上環境保持一致 , 所以分別嘗試了 python3.8/python3.6 進行開發環境配置驗證

本地進行 python 開發, 操作 so easy :

由於 requirements.txt 是 python3.6 下的, 部分包需要升級才能適配 python3.8

從 Pillow官網 可知: 升級 Pillow 到 8.4.0 版本後, 能支持 python3.6-python3.10

其他幾個(pandas, numpy, grpcio)沒有在官網找到對應的 python版本 兼容信息, 依靠測試來驗證

最後在 python3.6 的老開發機, 基於更新後的 requirements.txt 文件安裝依賴, 只有 pandas 庫不支持

python3.6 沒有支持 ARM版, 所以 m1pro mbp 本地跑 python3.6 這條路走不通, 需要使用 docker.

在 docker hub 上搜索, 有支持 arm64/v8 的鏡像版本

採用構建開發環境鏡像的老套路: 先在容器中run, 然後寫 Dockerfile, 最後基於構建的新鏡像驗證

當然, 也可以將啟動命令使用 ENTRYPOINT 指令添加到 Dcokerfile 中, 也可以使用 docker-compose.yml 來簡化, 這些 so easy , 就不展開了

ARM 在桌面的平台的優勢越來越明顯了, 尤其是筆記本越來越成為開發主力. m1 作為先行者, 開了一個很好的頭, 希望 RISC-V 也能帶來更多驚喜

關於 docker 官網 python 鏡像的版本, 稍微多說兩句: 以 python:3.6-slim-buster 為例

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/201269.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-06 11:31
下一篇 2024-12-06 11:31

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論