Điểm:2

source venv/bin/activate isn't returning anything on CentOS

lá cờ im

I'm trying to deploy a Python Flask app (for API endpoint) on CentOS for work, but every online guide I've followed isn't working for me!

python3 -m venv APIenv

The env was created successfully, but then trying to activate it:

source APIenv/bin/activate

Returns nothing, neither an error not is it activating it!

from what I understood, activating it should make the CLI look like this:

(venv) $ _

I'm also having another problem:

pip3 install firebase_admin

this worked and it was installed, but then running my app:

python3 app.py

Traceback (most recent call last): File "app.py", line 4, in import firebase_admin ModuleNotFoundError: No module named 'firebase_admin'

Every online guide I've followed is getting me stuck here, I really need to get this to work, what am I doing wrong?

Điểm:3
lá cờ us

Có lẽ bạn đã liên kết pip3 với một phiên bản python khác (3.6,3.8, v.v.) hơn python3 mà bạn đang sử dụng

Hãy chắc chắn rằng bạn đang sử dụng các phiên bản giống nhau và nó thực sự nằm trong venv kiểm tra python3

# trăn3 -V
Trăn 3.8.6
# con trăn3 nào
/tmp/APIenv/bin/python3
# ls -laht /tmp/APIenv/bin/python3
lrwxrwxrwx 1 gốc gốc 8 ngày 30 tháng 9 13:59 /tmp/APIenv/bin/python3 -> python38

Kiểm tra pip3

# pip3 -V
pip 19.3.1 từ /tmp/APIenv/lib64/python3.8/site-packages/pip (python 3.8)
# mà pip3
/tmp/APIenv/bin/pip3
# ls -laht /tmp/APIenv/bin/pip3
-rwxr-xr-x 1 gốc gốc 225 ngày 30 tháng 9 13:59 /tmp/APIenv/bin/pip3

đôi khi nó có thể trông như vậy ngay cả dưới VENV:

# con trăn38 nào
/tmp/APIenv/bin/python38
# ls -laht /tmp/APIenv/bin/python38
lrwxrwxrwx 1 gốc gốc 17 ngày 30 tháng 9 13:59 /tmp/APIenv/bin/python38 -> /usr/bin/python38

Sau đó, kiểm tra đường dẫn của trình thông dịch pip và python của bạn, để chắc chắn rằng bạn có thể sử dụng nó bằng đường dẫn tuyệt đối của venv của bạn

Đã cập nhật:

Sự cố liên quan đến phiên bản python3.6.

không thể cài đặt firebase_admin với phiên bản python3.6

Yêu cầu ít nhất python3.8 (3.7 chưa được kiểm tra)

Cài đặt Python38 cho Centos 8 và các mô-đun câu hỏi liên quan:

dnf cài đặt python38 python38-pip
pip38 cài đặt firebase_admin bình venv
KiDo avatar
lá cờ im
python3 -V => Python 3.6.8 | mà python3 => /bin/python3 | Đối với pip: pip3 -V => pip 9.0.3 từ /usr/lib/python3.6/site-packages (python 3.6) | mà pip3 => /bin/pip3 | Có phải vấn đề là Python là 3.6.8 trong khi pip chỉ là 3.6?
lá cờ us
không, đó không phải là vấn đề, đó có phải là đầu ra theo VENV không? như tôi thấy có các đường dẫn môi trường hệ thống, không phải từ môi trường ảo, có vẻ như đó là một vấn đề
KiDo avatar
lá cờ im
Tôi xin lỗi, tôi không hiểu, nếu có ích, tôi đang sử dụng root, đã cài đặt python & pip trước khi chuyển vào thư mục venv
lá cờ us
bạn nên kích hoạt môi trường virtuan bằng lệnh `source APIenv/bin/activate`, sau đó bạn sẽ thấy tiền tố như vậy trong trình bao `(venv) $ _`, sau đó chạy các lệnh `pip3 install firebase_admin` và `python3 app.py`, tất cả nó trong môi trường ảo mà bạn có thể nhận thấy bằng tiền tố `(venv) $ _`
KiDo avatar
lá cờ im
Tôi đang thử điều đó, nhưng nó không trả về gì cả, như bạn đã đề cập, trình bao sẽ thay đổi thành ```(venv) $``` nhưng trong trường hợp của tôi, nó vẫn giữ nguyên ```[root@ MyAPI]#```
lá cờ us
Vì vậy, bạn có 2 vấn đề, một vấn đề liên quan đến kích hoạt venv và second. Tôi khá chắc chắn rằng vấn đề với `pip3 install firebase_admin` do phiên bản python3.6 firebase_admin đang cố cài đặt nhưng cuối cùng không thành công, bạn nên cài đặt phiên bản mới hơn của python, ít nhất là 3,8 sau đó chạy một cái gì đó như `pip38 install firebase_admin jar venv` và thử lại các bước từ câu hỏi của bạn ở trên, nhưng với việc sử dụng phiên bản mới với `python38` thay vì python3
KiDo avatar
lá cờ im
Tôi đã làm theo các bước đó và mọi thứ dường như đang hoạt động, vấn đề duy nhất còn lại là tôi vẫn không thể truy cập nó bằng IP công cộng (các PC khác), tôi đang chạy nó với: ```flask run --host=0.0. 0.0``` và tôi đã mở cổng 5000, nhưng khi thử kiểm tra nó bằng Postman thì trả về Hết thời gian kết nối
lá cờ us
hãy thử xóa các quy tắc iptables nếu có thể bằng `iptables -F` và kiểm tra kết nối, nếu nó hoạt động, bạn có thể tạo quy tắc chấp nhận iptables cho cổng đó, nếu nó không hữu ích - hãy cung cấp cho tôi đầu ra của thiết bị đầu cuối bình trong khi bắt đầu
KiDo avatar
lá cờ im
[root@ MyAPI]# jar run --host=0.0.0.0 * Phục vụ ứng dụng Flask 'app.py' (tải chậm) * Môi trường: sản xuất CẢNH BÁO: Đây là một máy chủ phát triển. Không sử dụng nó trong một triển khai sản xuất không. Thay vào đó, hãy sử dụng máy chủ WSGI sản xuất. ...
KiDo avatar
lá cờ im
* Chế độ gỡ lỗi: tắt * Chạy trên tất cả các địa chỉ. CẢNH BÁO: Đây là một máy chủ phát triển. Không sử dụng nó trong một triển khai sản xuất không. * Chạy trên http://serverIP:5000/ (Nhấn CTRL+C để thoát)
lá cờ us
`serverIP:5000` là gì ?, nên có `Running on http://0.0.0.0:5000/` bạn có chuỗi app.run như vậy không `app.run(host='0.0.0.0', port= 5000)` bên trong ứng dụng hay có vẻ khác? ngoài ra, bạn nên có địa chỉ IP thực sự công khai (không liên quan đến phạm vi riêng tư)
KiDo avatar
lá cờ im
serverIP là IP máy chủ của tôi: âââxx.xx.xx.xx:5000âââ và trong app.run, tôi chỉ có âapp. run()â, vì hướng dẫn Flask nói rằng tôi chỉ cần chạy lệnh này để đặt nó ở chế độ công khai: âflask run âhost=0.0.0.0â và tôi có một IP công cộng, nóâ là nơi lưu trữ trang web WordPress của tôi.
lá cờ us
nếu bạn nói như vậy và bạn không thể kết nối với ip công cộng và cổng 5000 thì đó là sự cố mạng ở phía HĐH máy chủ (liên quan đến quy tắc kết nối đầu vào) hoặc ở phía bạn (bộ định tuyến, nhà cung cấp internet, v.v., thứ gì đó có thể chặn đầu ra kết nối với 5000), bạn có thể cung cấp đầu ra của `iptables-save` thì tôi sẽ xem có vấn đề gì không
KiDo avatar
lá cờ im
OMG bạn nói đúng! Tôi đã thử truy cập nó bằng một mạng khác và nó đã hoạt động! Bạn là một thiên tài và tôi không có lời nào để bày tỏ sự đánh giá cao và lòng biết ơn đối với sự giúp đỡ của bạn! Tôi chỉ có một câu hỏi cuối cùng, làm cách nào để giữ cho nó chạy trong nền?
lá cờ us
Bạn có thể làm theo câu trả lời của tôi tại câu hỏi này để chạy nó dưới dạng dịch vụ systemd: https://serverfault.com/questions/1078666/how-do-i-create-a-python-3-service-that-uses-socket-with-systemd/1079133#1079133

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.