Cách tốt nhất để tải xuống gói python và phụ thuộc của nó từ pypi để cài đặt ngoại tuyến trên máy khác là gì? Có cách nào dễ dàng để làm điều này với pip hoặc easy_install? Tôi đang cố gắng cài đặt thư viện yêu cầu trên một hộp FreeBSD không được kết nối với internet.Gói Python Cài đặt Ngoại tuyến
Trả lời
Nếu gói nằm trên PYPI, hãy tải xuống và phụ thuộc của nó vào một số thư mục cục bộ. Ví dụ:
$ mkdir /pypi && cd /pypi $ ls -la -rw-r--r-- 1 pavel staff 237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz -rw-r--r-- 1 pavel staff 389741 Feb 22 17:10 Jinja2-2.6.tar.gz -rw-r--r-- 1 pavel staff 70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz -rw-r--r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz -rw-r--r-- 1 pavel staff 1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz -rw-r--r-- 1 pavel staff 488207 Apr 10 18:26 boto-2.3.0.tar.gz -rw-r--r-- 1 pavel staff 490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz
Một số gói có thể phải được lưu trữ thành tarball tương tự bằng tay. Tôi làm điều đó rất nhiều khi tôi muốn một phiên bản mới hơn (ít ổn định hơn) của một cái gì đó. Một số gói không có trên PYPI, do đó, chúng cũng áp dụng cho chúng.
Giả sử bạn có ứng dụng Python được tạo đúng cách trong ~/src/myapp
. ~/src/myapp/setup.py
sẽ có danh sách install_requires
đề cập đến một hoặc nhiều nội dung bạn có trong thư mục /pypi
của mình. Cũng giống như vậy:
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
Nếu bạn muốn để có thể chạy ứng dụng của bạn với tất cả các phụ thuộc cần thiết trong khi vẫn hack vào nó, bạn sẽ làm điều gì đó như thế này:
$ cd ~/src/myapp $ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi
Bằng cách này ứng dụng của bạn sẽ được thực thi ngay từ thư mục nguồn của bạn. Bạn có thể hack vào mọi thứ, và sau đó chạy lại ứng dụng mà không cần xây dựng lại bất cứ thứ gì.
Nếu bạn muốn cài đặt ứng dụng của bạn và phụ thuộc của nó vào môi trường trăn hiện tại, bạn sẽ làm điều gì đó như thế này:
$ cd ~/src/myapp $ easy_install --always-unzip --allow-hosts=None --find-links=/pypi .
Trong cả hai trường hợp, việc xây dựng sẽ thất bại nếu một hoặc nhiều phụ thuộc aren' t có trong thư mục /pypi
. Nó sẽ không cố gắng cài đặt một cách nhanh chóng những thứ còn thiếu từ Internet.
Tôi đặc biệt khuyên bạn nên gọi setup.py develop ...
và easy_install ...
trong một hoạt động virtual environment để tránh làm ô nhiễm môi trường Python toàn cầu của bạn. Đó là (virtualenv đó là) khá nhiều cách để đi. Không bao giờ cài đặt bất cứ thứ gì vào môi trường Python toàn cục.
Nếu máy mà bạn đã xây dựng ứng dụng của bạn có kiến trúc giống với máy mà bạn muốn triển khai, bạn có thể chỉ cần tarball toàn bộ thư mục môi trường ảo mà bạn easy_install
-ed mọi thứ. Ngay trước khi tarballing, bạn phải làm cho thư mục môi trường ảo có thể định vị lại (xem tùy chọn --relocatable). LƯU Ý: máy đích cần phải cài đặt cùng một phiên bản Python và mọi phụ thuộc C mà ứng dụng của bạn cũng phải được cài đặt sẵn (ví dụ: nếu bạn phụ thuộc vào PIL, thì libpng, libjpeg, v.v. được cài đặt sẵn).
Thay vì '--allow-hosts = None' bạn có thể sử dụng nút chuyển' --no-index' – romor
Bạn có thể giải thích cách tạo ứng dụng Python đúng cách không? –
@PrabhjotRai vui lòng tham khảo https://packaging.python.org/distributing/ –
Tải xuống tarball, chuyển nó sang máy FreeBSD của bạn và giải nén nó, sau đó chạy python setup.py install
và bạn đã hoàn tất!
EDIT: Chỉ cần thêm vào đó, bạn cũng có thể cài đặt tarball với pip ngay bây giờ.
Còn tất cả phụ thuộc thì sao? Cách tốt nhất để giải quyết chúng là gì? Tôi có cần phải cài đặt các phụ thuộc theo cách thủ công không? –
Vâng, đó không phải là cách duy nhất tôi biết. – dav1d
Tôi sử dụng tùy chọn -d
(hoặc --download
) để pip install
, làm cho quá trình tải xuống tarball từ SDK trở nên đơn giản hơn nhiều.Ví dụ: pip install --download /path/to/some/dir celery
sẽ tải xuống tarballs sdist cho cần tây và tất cả các phụ thuộc của nó là /path/to/some/dir
(nhưng sẽ không cài đặt chúng). Sau đó, bạn có thể sử dụng pip install --no-index --find-links /path/to/some/dir/ celery
để cài đặt cần tây bằng cách sử dụng các sdists đã tải xuống đó mà không cần truy cập mạng.
Quy trình tương tự hoạt động nếu bạn thay thế celery
trong cả hai lệnh bằng -r requirements.txt
, trong đó requirements.txt là tệp yêu cầu pip liệt kê tất cả các gói bạn muốn (và tùy chọn phiên bản bạn muốn).
CẬP NHẬT
không chấp nhận: pip cài đặt --download đã bị phản đối và sẽ loại bỏ trong tương lai. Pip hiện có một lệnh download cần được sử dụng thay vào đó là .
Lệnh là như thế này:
pip download -r requirements.txt
Đối python3:
pip3 download -r requirements.txt
vấn đề với điều này là phụ thuộc có thể có các phụ thuộc khác và những phụ thuộc đó sẽ không được tải xuống. – vikki
[Rắn giỏ] (https://github.com/prezi/snakebasket) (được xây dựng trên đầu trang của pip) sẽ tải về phụ thuộc 'phụ thuộc là tốt. – vikki
@vikki Không đúng, "pip install --download" cũng tải xuống các phụ thuộc, vì vậy các lệnh trên sẽ hoạt động chính xác ngay cả khi các yêu cầu của bạn có phụ thuộc bổ sung. Rắn giỏ có thể làm những thứ hữu ích khác (không bao giờ sử dụng nó), nhưng nó chắc chắn không cần thiết vì lý do đó. –
Đối với Pip 8.1.2 bạn có thể sử dụng pip download -r requ.txt
tải gói để máy tính cục bộ của bạn.
python ngoại tuyến. để làm điều này tôi sử dụng virtualenv (cách ly môi trường Python)
1) cài đặt virtualenv trực tuyến với pip:
pip install virtualenv --user
hoặc offline với WHL: đi đến link này, tải về phiên bản mới nhất (.whl hoặc tar. gz) và cài đặt đó bằng lệnh này:
pip install virtualenv-15.1.0-py2.py3-none-any.whl --user
bằng cách sử dụng --user
bạn không cần phải sử dụng sudo pip…
.
2) sử dụng virtualenv
trên máy tính trực tuyến chọn một thư mục với thiết bị đầu cuối cd
và chạy mã này:
python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask
sau khi cài đặt tất cả các gói, bạn phải tạo ra một requirements.txt
như vậy trong khi virtualenv của bạn là đang hoạt động, viết
pip freeze > requirements.txt
mở một thiết bị đầu cuối mới và tạo một env khác như myenv2
.
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
bây giờ bạn có thể vào thư mục ẩn của bạn, nơi bạn thư mục requirements.txt
và tranferred_packages
đang chờ ở đó. tải xuống các gói có mã sau và đặt tất cả chúng vào thư mục tranferred_packages
.
pip download -r requirements.txt
mất thư mục ẩn của bạn vào máy tính ẩn và sau đó
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
những gì có trong thư mục ẩn [requirements.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...} ]
kiểm tra danh sách các gói của bạn
pip list
lưu ý: như chúng ta vào năm 2017 nó là tốt hơn để sử dụng python 3. yo u có thể tạo python 3 virtualenv với lệnh này.
virtualenv -p python3 envname
Dường như có các bước bị thiếu hoặc "làm xáo trộn" ở đây, tôi sẽ thấy 'tắt' và sau đó 'đóng băng' ... cd ngoại tuyến và ./tranferred_packages xuất hiện từ hư không - rõ ràng điều này cần dọn dẹp? – Hannu
có thể, nhưng bạn nên xem xét 'Tôi muốn một bài đăng ngắn', 'quá trình đó phức tạp và tôi không thể viết từng bước (chỉ có thể có trong YouTube)'. – cyera
Sử dụng wheel
gói đã biên soạn.
bó lên:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
bản sao tarball và cài đặt:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*
Note wheel
gói nhị phân không với các máy khác.
Thêm ref. ở đây: https://pip.pypa.io/en/stable/user_guide/#installation-bundles
Tôi gặp sự cố với việc kết hợp trên máy với Python 3.6 và giải nén bằng Python 3.5: "_
- 1. Cài đặt gói không hoạt động ngoại tuyến
- 2. Cài đặt bsddb gói - python
- 3. Cách cài đặt npm -g trên máy chủ ngoại tuyến
- 4. Cài đặt gói Python trong Windows
- 5. Cài đặt các gói python trong nitrousio
- 6. Python pip - cài đặt tài liệu cho các gói?
- 7. Kiểm tra xem Gói Python có được cài đặt
- 8. Cách ngăn cài đặt gói cài đặt dưới dạng .egg
- 9. PIP cài đặt Gói Python không có tệp setup.py?
- 10. đạo Tiêu Sublime 2 gói để cài đặt python đúng
- 11. Liệt kê các gói site python đã cài đặt?
- 12. Cài đặt Python trọn gói từ Github Sử dụng PIP
- 13. cài đặt gói tarball nguồn Python với pip
- 14. gói Python không cài đặt trong virtualenv sử dụng pip
- 15. Ruby On Rails 3.x Cài đặt ngoại tuyến (không có kết nối internet)
- 16. js grunt cài đặt gói
- 17. TextMate - Cách cài đặt gói?
- 18. Phát hiện các ngôn ngữ đã cài đặt để nhận dạng ngoại tuyến
- 19. ngoại lệ cài đặt leksah
- 20. Chạy "gói cài đặt" không thành công và yêu cầu tôi chạy "gói cài đặt"
- 21. Homebrew, python cài đặt
- 22. Tôi cần cài đặt gói nào để sử dụng ổ cắm định tuyến?
- 23. Làm thế nào để cài đặt Github cho Windows ngoại tuyến?
- 24. Tải xuống tài liệu XCode 4.2 để cài đặt ngoại tuyến
- 25. VS 2010 ClickOnce - Chỉ định URL để cài đặt ngoại tuyến?
- 26. Gói cài đặt: Không thể tìm thấy gói 'WebActivator'
- 27. Sự khác biệt giữa gói và gói cài đặt
- 28. Cài đặt gói kernlab trong R
- 29. gói cài đặt pip từ url
- 30. Cài đặt gói octave trong ubuntu
Liên quan: [Cách cài đặt gói theo require.txt từ thư mục cục bộ?] (http://stackoverflow.com/q/7225900/95735) –