2013-02-13 48 views
30

Cách thêm thư viện python bên thứ ba trong Google App Engine, không được Google cung cấp? Tôi đang cố gắng sử dụng BeautifulSoup trong Google App Engine và không thể làm như vậy. Nhưng câu hỏi của tôi là cho bất kỳ thư viện nào tôi muốn sử dụng trong Google App Engine.Làm cách nào để đưa thư viện Python của bên thứ ba vào Google App Engine?

+0

bản sao có thể có của [Làm cách nào để quản lý thư viện Python của bên thứ ba bằng Google App Engine? (virtualenv? pip?)] (http://stackoverflow.com/questions/4863557/how-do-i-manage-third-party-python-libraries-with-google-app-engine-virtualenv) – Wernight

Trả lời

43

Thực ra tôi nghĩ rằng this answer phù hợp hơn ở đây.

Nếu bạn muốn sử dụng thư viện của bên thứ ba không được bao gồm trong this list, thì bạn sẽ phải thêm chúng theo cách thủ công.

Để bao gồm bất kỳ thư viện nào khác theo cách thủ công, bạn phải đặt chúng trong thư mục có thời lượng app.yaml. Vì vậy, ví dụ nếu bạn có cấu trúc sau:

hello 
├── libs 
│ └── bs4 
├── hello.py 
└── app.yaml 

sau đó trong bạn hello.py bạn cần phải đặt hai dòng sau vào đầu file:

import sys 
sys.path.insert(0, 'libs') 

Sau khi làm điều đó bạn sẽ có thể để sử dụng bất kỳ thư viện của bên thứ ba nào bạn sẽ đặt trong thư mục libs đó.

Ví dụ:

from bs4 import BeautifulSoup 
+0

Không làm cho nó hoạt động sau khi di chuyển nó sang libs –

+0

xấu của tôi, cuối cùng cũng làm việc. Cảm ơn –

+0

Tôi vẫn gặp sự cố với vấn đề này sau khi làm theo hướng dẫn. Có gì thay đổi với GAE không? –

0

Chỉ cần đặt Beautifulsoup vào thư mục gốc của dự án và tải lên tất cả

+0

Tôi có thể đặt nó trong một số thư mục cụ thể như - 'lib'? –

+1

có thao tác sys.path hoặc sử dụng mô-đun trang web như trong 'site.addsitedir ('lib') –

3

Bạn chỉ cần sao chép thư mục chứa thư viện bạn muốn sử dụng vào dự án công cụ ứng dụng của mình.

Sau đó, khi bạn triển khai nó được tải lên với ứng dụng của bạn và có sẵn để sử dụng.

EDIT: Jesse's answer là cách tôi hiện thực hiện việc này. Vì vậy, làm điều đó!

1

Cách nó làm việc ở đây là:

import sys 
# sys.path.insert(0, 'libs') #"Old" way, not working for me. 
sys.path.append(os.path.join(os.path.dirname(__file__), "libs")) # This works! 

Sau đó, nhập khẩu thông thường:

from bs4 import BeautifulSoup 
50

Google đã cung cấp một cách ghi nhận cho bao gồm của bên thứ ba thư viện trong dự án GAE của bạn.

Xem "Adding Third-party Packages to the Application" section of the Libraries in Python 2.7 docs.

Nếu bạn muốn bao gồm các gói bên thứ ba tinh khiết-python bổ sung, bạn có thể thực hiện việc này bằng cách thiết lập tính năng bán hàng. Việc cung cấp cho phép bạn cài đặt các gói vào một thư mục con của dự án của bạn và đưa chúng vào trong mã của bạn. Để sử dụng vendoring, hãy tạo (hoặc sửa đổi) appengine_config.py trong thư mục gốc của dự án của bạn.

from google.appengine.ext import vendor 
# Add any libraries installed in the "lib" folder. 
vendor.add('lib') 

Và sau đó chỉ cần đặt tất cả các mã nguồn libs trong ô lib dir

> pip install beautifulsoup4 -t lib 

Vì vậy, cấu trúc thư mục dự án của bạn trông như thế này:

project 
- lib 
    - bs4 
- your_code.py 

này sẽ cho phép bạn tệp nguồn của dự án để nhập các gói/mô-đun libs như thể chúng được thêm vào PYTHON_PATH của bạn. Ví dụ:

# file: your_code.py 
import bs4 # no need for 'from lib import bs4' 
# do stuff with bs4... 

Bạn cũng có thể dễ dàng cài đặt tất cả mọi thứ từ một tập tin requirements.txt bằng cách thực hiện lệnh sau

> pip install -t lib -r requirements.txt 
+2

Câu trả lời này có vẻ tốt hơn sau đó câu trả lời được chấp nhận. Cảm ơn Jesse! –

+2

điều này làm việc cho tôi trong một thời gian dài, nhưng chỉ bắt đầu thất bại một cách không thể giải thích được. Tôi hiện đang nhận được 'virtualenv: không thể truy cập lib: Không có thư mục ảo hoặc trang web ảo' – bgenchel

+0

Tôi đang nhận được cùng một điều ngay bây giờ. Kỳ dị. –

0

pip cài đặt -t package_name lib

lib: sự vị trí cho thư viện của bên thứ ba

Sau đó, bạn nên sử dụng gói này như một thư viện thông thường mà bạn sử dụng từ ipython hoặc terminal.

Các vấn đề liên quan