Cách cài đặt phiên bản Scipy mới nhất trên Raspberry Pi


10

Tôi hiện đang có hệ điều hành Raspbian

và tôi đã thử:

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

hoạt động tốt nhưng cài đặt phiên bản cũ (0.10)

Và:

sudo apt-get install libatlas-base-dev gfortran python-pip

sudo pip install scipy

mà sau hơn một giờ làm việc đã kết thúc với một số lỗi.

Bạn đã làm gì để cài đặt Scipy 0.12 trên Raspberry của bạn?


1
Bạn có thể đưa ra thông báo lỗi chính xác?
Arne

Ngoài ra, đây là một bài đăng trên blog về việc cài đặt scipy trên Raspberry Pi: wyolum.com/numpyscipymatplotlib-on-raspberry-pi
Arne

Câu trả lời:


14

TL; DR: bỏ qua đoạn cuối để biết cách tăng dung lượng trao đổi và tránh tắc nghẽn bộ nhớ. Ngoài ra, không sử dụng pip cho numpy và scipy.

Để có được phiên bản mới nhất của scipy trên mâm xôi Pi, bạn cần xây dựng từ nguồn. Lý do chính là scipy dựa vào các thư viện C và fortran đã biên dịch, cần được biên dịch trên cùng một kiến ​​trúc. Thông thường pip installsẽ tìm nạp các gói dựng sẵn cho bạn, nhưng kiến ​​trúc ARM của Raspberry Pi không thực sự được hỗ trợ.

Nếu đây là tất cả những gì bạn cần thì nó sẽ tương đối dễ dàng (có thể tìm thấy hướng dẫn chính ở đây và được tóm tắt bên dưới), nhưng có một vấn đề khác với pi mâm xôi mà tôi nhận ra chỉ sau một tuần nghiên cứu và dùng thử và lỗi (bỏ qua tại kết thúc nếu bạn chỉ cần sửa chữa), đó là do, tôi tin rằng, với số lượng nhỏ bộ nhớ có sẵn.

Tôi sẽ chỉ thử và tóm tắt toàn bộ quá trình (để mọi người không phải truy cập internet như tôi đã làm).

Yêu cầu

Có một vài yêu cầu để xây dựng scipy. Theo như các gói python đi, bạn sẽ cần numpy, cython, setuptools, và (nếu bạn muốn xây dựng các tài liệu hướng dẫn) Sphinx. Bạn nên thử và sử dụng phiên bản của các gói đi kèm với Raspbian (trong các gói như python3-numpy), nhưng chúng có thể cần được xây dựng riêng (OT).

Theo yêu cầu hệ thống, bạn sẽ cần một vài gói có thể được cài đặt apt-get, cụ thể là:

  • Một thư viện toán học BLAS / LAPACK với các tiêu đề phát triển, ví dụ libopenblas-baselibopenblas-dev;
  • python-dev;
  • Trình biên dịch C và Fortran, gccgfortran;

Cuối cùng, bạn cần mã nguồn, mà bạn có thể tải xuống từ đây (Scipy 1.0.0 là phiên bản ổn định mới nhất như tôi đang viết). Sau đó, nó chỉ là một vấn đề của tar -xzvf scipy-v1.0.0.tar.gz cd scipy

Tổng hợp nguồn

Tại thời điểm này, nếu bạn bắt đầu quá trình xây dựng, nó có vẻ sẽ ổn, nhưng nó sẽ bị treo sau vài phút.

Thêm không gian hoán đổi lớn hơn

Điều này là do tập lệnh biên dịch chiếm toàn bộ RAM và bộ nhớ trao đổi bằng cách sinh ra nhiều quá trình (và sao chép bộ nhớ theo hệ quả). Vấn đề là trong Raspberry Pi, không gian hoán đổi đặc biệt nhỏ (chỉ 100 MB tôi nghĩ), trong khi định mức sẽ là có cùng kích thước RAM của bạn.

Như đã giải thích ở đâyở đây , không gian hoán đổi có thể được tăng lên như sau:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1

sẽ cung cấp cho bạn 1GB dung lượng trao đổi.

Sau đó, người ta cuối cùng có thể xây dựng và cài đặt với

python3 setup.py build

python3 setup.py install --user

(bạn có thể bỏ --user flagnếu bạn muốn cài đặt toàn hệ thống, nhưng bạn sẽ cần đặc quyền root).

Cuối cùng, người ta loại bỏ trao đổi thêm và khôi phục mặc định:

sudo swapoff /var/swap.1
sudo rm /var/swap.1

1
Tôi đã giải quyết vài ngày vấn đề bộ nhớ này với quả mâm xôi. Đàn ông bạn đã cứu mạng tôi.
Taras Vaskiv

1
@zurfyx IMHO bài đăng này nên được đánh dấu là câu trả lời
jlandercy

Cảm ơn @jlandercy, tôi đã hy vọng điều đó nhưng tôi sợ OP đã từ bỏ nền tảng này.
teoguso

5

Cài đặt bằng cách sử dụng một bánh xe cho pi. Nó có thể không phải là scipy mới nhất nhưng nó khá cập nhật.

  • cập nhật pip: pip install pip --upgrade(hoặc pip3, thích ứng với phiên bản python của bạn)
  • truy cập https://www.piwheels.org/simple/scipy/
  • chọn phiên bản scipy và nền tảng đích (ví dụ: armv6l cho pi zero và pi trước đó; armv7l cho 3)
    • ví dụ: scipy-1.2.1-cp35-cp35m-linux_armv7l.whltrên mô hình 3 B
  • tải tập tin .whl
    • sử dụng ví dụ: wget https://www.piwheels.org/simple/scipy/scipy-1.2.1-cp35-cp35m-linux_armv7l.whl#sha256=270be300233af556e6ee3f55a0ae237df0cb65ac85d47559010d7a9071f2e878
  • đi đến nơi .whltệp được tải xuống và:pip install the-scipy-file.whl

Ghi chú :

  • điều này có thể được thực hiện trong một môi trường ảo (vừa được thử nghiệm)
  • đây là cách nhanh hơn bất kỳ phương pháp nào khác mà tôi đã thấy hoặc đã thử.

3

Debian, như goldilocks đã chỉ ra, không phải lúc nào cũng xuất xưởng với các phiên bản mới nhất của các gói. Đôi khi, nó xuất xưởng với các phiên bản thực sự cổ xưa , như bản phân phối Netpbm, đã hơn 12 năm lỗi thời.

Có hai cách để đối phó với điều này:

  1. Sống với nó : bạn có chắc bạn thực sự phải có phiên bản mới nhất? Nếu mã của bạn yêu cầu các chức năng hoặc sửa lỗi từ phiên bản mới nhất, thì đây không phải là một tùy chọn. Các gói Debian thường khá ổn định, vì vậy nếu bạn có thể làm cho mã của mình hoạt động với nó, bạn sẽ không phải lo lắng về việc duy trì các bản nâng cấp của riêng mình. Dưới đây là Ghi chú phát hành SciPy 0.10.0 - các tính năng này có hoạt động không?

  2. Xây dựng từ nguồn : cách dễ nhất để có được các phụ thuộc nguồn cho bản phát hành hiện tại là sử dụng apt-get build-dep- nhưng nó cần một dòng nguồn trong /etc/apt/sources.list:

    • Để /etc/apt/sources.list, thêm dòng: deb-src http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi (về cơ bản, giống như debdòng, nhưng với deb-src. Nếu bạn không, apt sẽ khiếu nại.)
    • Bây giờ vấn đề sudo apt-get build-dep python-scipy; cái này trả về một danh sách lớn các gói, nhiều hơn cả bài của bạn. Thông báo lỗi của bạn có thể đã bị thiếu phụ thuộc.
    • Hãy thử xây dựng scipy một lần nữa.

Lưu ý rằng vẫn có thể có các vấn đề phụ thuộc, vì phiên bản hiện tại (0.14 hoặc hơn) có thể yêu cầu các gói phụ thuộc mới hơn Raspbian biết. Nếu bạn có thể, hãy thử sử dụng một công cụ như thế checkinstallsẽ cho Raspbian biết rằng bạn đã cài đặt phiên bản mới hơn với các phụ thuộc đặc biệt, để nó không bị dồn nén trong các bản nâng cấp thông thường. Quá trình này là một chút khó khăn; Một số gợi ý về cách thực hiện tại đây: Cách xây dựng gói Debian / Ubuntu từ nguồn?


2

Tôi không phải là người dùng python, nhưng lý do (có thể xảy ra) cho phiên bản cũ là chính sách debian phải mất quá nhiều thời gian để cập nhật phiên bản, cộng với gói có thể bị che khuất (do đó được cập nhật thậm chí ít hơn), cộng với raspbian bản thân nó khá mơ hồ liên quan đến debian (do đó các gói ở đó được cập nhật thậm chí còn ít hơn). Tức là, đó là hệ quả của các tài nguyên có sẵn (những người duy trì các gói, những người thường không phải là nhà phát triển thượng nguồn).

sau hơn một giờ làm việc kết thúc với một số lỗi

Có lẽ đây là một vấn đề với việc biên dịch một hoặc nhiều mô-đun, mặc dù bạn không thực sự nói lỗi là gì. Biên dịch các module python nên chủ yếu làm việc trên pi, tôi nghĩ, nhưng hãy nhớ nó là một kiến trúc bất thường đối với như vậy, với các thư viện biên soạn đặc biệt cho nó. Thật không may, điều này mang đến rủi ro về các lỗi chưa được chú ý trước đó ở một phần hoặc một bề mặt khác (nếu bạn muốn tìm lỗi trong một ngôn ngữ được biên dịch - các phần của một số mô-đun python nằm trong C - hãy thử biên dịch mã trên một vài nền tảng khác nhau, lol ...). Xác định vị trí thủ phạm sẽ mất thêm một chút công việc và chú ý đến các lỗi cụ thể.


2

Tôi đã quản lý để cài đặt scipy với "pip install scipy", sau nhiều lần thử, bằng cách tăng kích thước hoán đổi lên 2048 trên Raspberry 4 với 2 Gb.


1

1) Tăng trao đổi lên 1GB

sudo dphys-swapfile swapoff
sudo vim /etc/dphys-swapfile

CONF_SWAPSIZE = 1024

sudo dphys-swapfile swapon

2) Khởi động lại để áp dụng thay đổi trao đổi

sudo reboot

3) Hơn bản dựng, đây là Dockerfile của tôi

FROM python:3-alpine
MAINTAINER codertarasvaskiv

RUN apk add --no-cache g++ gfortran python3-dev openblas-dev bash
RUN pip install --no-cache-dir numpy
RUN pip install --no-cache-dir scipy
RUN pip install --no-cache-dir <my custom package>

ENTRYPOINT ["bash"]

Vì vậy, phải mất 10 phút để xây dựng numpy, hơn almoust 3 giờ để xây dựng scipy trong container.


1

Trên một số bản phân phối (ví dụ Arch Linux Arm), có các gói được biên dịch sẵn như python-scipy, python-numpypython-matplotlib. Tùy thuộc vào phiên bản Python được mặc định trong bản phân phối và yêu cầu của bạn, nó cũng có thể python3-*. Bạn có thể sẽ cần phải xóa các gói đã cài đặt trước đó và phần phụ thuộc của chúng cho các gói này được cài đặt từ các bản phân phối thay vì từ pip. Gói Python pip-autoremovecó thể hữu ích cho việc đó vì pipkhông loại bỏ bất kỳ phụ thuộc nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.