Score:2

source venv/bin/activate ไม่ส่งคืนสิ่งใดบน CentOS

ธง im

ฉันกำลังพยายามปรับใช้แอป Python Flask (สำหรับจุดสิ้นสุด API) บน CentOS เพื่อการทำงาน แต่คู่มือออนไลน์ทั้งหมดที่ฉันติดตามใช้ไม่ได้ผลสำหรับฉัน!

python3 -m venv APIenv

สร้าง env สำเร็จแล้ว แต่พยายามเปิดใช้งาน:

APIenv/bin/activate ต้นทาง

ไม่ส่งคืนสิ่งใด ไม่มีข้อผิดพลาดที่ไม่ได้เปิดใช้งาน!

จากสิ่งที่ฉันเข้าใจ การเปิดใช้งานควรทำให้ CLI มีลักษณะดังนี้:

(เวิ่นเว้อ) $_

ฉันยังมีปัญหาอื่น:

pip3 ติดตั้ง firebase_admin

สิ่งนี้ใช้งานได้และติดตั้งแล้ว แต่เรียกใช้แอพของฉัน:

python3 app.py

Traceback (การโทรครั้งล่าสุดล่าสุด): ไฟล์ "app.py" บรรทัดที่ 4 ใน นำเข้า firebase_admin ModuleNotFoundError: ไม่มีโมดูลชื่อ 'firebase_admin'

คู่มือออนไลน์ทุกเล่มที่ฉันติดตามทำให้ฉันติดอยู่ที่นี่ ฉันต้องทำให้สิ่งนี้ใช้งานได้จริง ๆ ฉันทำอะไรผิด

Score:3
ธง us

คุณอาจมี pip3 ที่เชื่อมโยงกับ python (3.6,3.8 ฯลฯ ) รุ่นอื่นที่ไม่ใช่ python3 ที่คุณใช้อยู่

ตรวจสอบให้แน่ใจว่าคุณใช้เวอร์ชันเดียวกันและอยู่ใน venv จริงๆ ตรวจสอบ python3

# python3 -V
ไพธอน 3.8.6
# ซึ่ง python3
/tmp/APIenv/bin/python3
# ls -laht /tmp/APIenv/bin/python3
lrwxrwxrwx 1 รูทรูท 8 ก.ย. 30 13:59 /tmp/APIenv/bin/python3 -> python38

ตรวจสอบ pip3

# pip3 -V
pip 19.3.1 จาก /tmp/APIenv/lib64/python3.8/site-packages/pip (python 3.8)
#ซึ่งpip3
/tmp/APIenv/bin/pip3
# ls -laht /tmp/APIenv/bin/pip3
-rwxr-xr-x 1 รูทรูท 225 ก.ย. 30 13:59 /tmp/APIenv/bin/pip3

บางครั้งอาจมีลักษณะเช่นนี้แม้ภายใต้ VENV:

# ซึ่ง python38
/tmp/APIenv/bin/python38
# ls -laht /tmp/APIenv/bin/python38
lrwxrwxrwx 1 รูทรูท 17 ก.ย. 30 13:59 /tmp/APIenv/bin/python38 -> /usr/bin/python38

ตรวจสอบเส้นทางของตัวแปล pip และ python ของคุณ เพื่อให้แน่ใจว่าคุณสามารถใช้งานได้โดยเส้นทางที่แน่นอนของ venv ของคุณ

อัปเดต:

ปัญหาที่เกี่ยวข้องกับเวอร์ชัน python3.6

ไม่สามารถติดตั้ง firebase_admin ด้วยเวอร์ชัน python3.6

ต้องการอย่างน้อย python3.8 (3.7 ไม่ได้ทดสอบ)

การติดตั้ง Python38 สำหรับ Centos 8 และโมดูลคำถามที่เกี่ยวข้อง:

dnf ติดตั้ง python38 python38-pip
pip38 ติดตั้ง firebase_admin กระติกน้ำ venv
KiDo avatar
im flag
python3 -V => งูหลาม 3.6.8 | ซึ่ง python3 => /bin/python3 | สำหรับ pip: pip3 -V => pip 9.0.3 จาก /usr/lib/python3.6/site-packages (python 3.6) | ซึ่ง pip3 => /bin/pip3 | ปัญหาคือ Python คือ 3.6.8 ในขณะที่ pip เป็นเพียง 3.6 หรือไม่
us flag
ไม่ ไม่ใช่ปัญหา เอาต์พุตนั้นอยู่ภายใต้ VENV หรือไม่ เนื่องจากฉันเห็นว่ามีเส้นทางสภาพแวดล้อมของระบบ ไม่ใช่จากสภาพแวดล้อมเสมือน จึงดูเป็นปัญหา
KiDo avatar
im flag
ฉันขอโทษ ฉันไม่เข้าใจ ถ้ามันช่วยได้ ฉันกำลังใช้ root ติดตั้ง python & pip ก่อนที่จะย้ายไปยังไดเร็กทอรี venv
us flag
คุณควรเปิดใช้งานสภาพแวดล้อมเสมือนด้วยคำสั่ง `source APIenv/bin/activate' จากนั้นคุณจะเห็นคำนำหน้าดังกล่าวในเชลล์ `(venv) $ _` จากนั้นเรียกใช้คำสั่ง `pip3 install firebase_admin` และ `python3 app.py` ทั้งหมด ในสภาพแวดล้อมเสมือนจริงซึ่งคุณสามารถสังเกตได้จากคำนำหน้า `(venv) $ _`
KiDo avatar
im flag
ฉันกำลังลองอยู่ แต่มันไม่ส่งคืนอะไรเลย อย่างที่คุณพูดถึง เชลล์ควรเปลี่ยนเป็น ```(venv) $``` แต่ในกรณีของฉัน มันยังคงเหมือนเดิม ```[root@ MyAPI]#```
us flag
ดังนั้น คุณมี 2 ปัญหา ปัญหาหนึ่งเกี่ยวข้องกับการเปิดใช้งาน venv และ sercond ฉันค่อนข้างแน่ใจว่ามีปัญหากับ `pip3 install firebase_admin` เนื่องจาก python3.6 เวอร์ชัน firebase_admin พยายามติดตั้งแต่ล้มเหลวในตอนท้าย คุณควรติดตั้ง python เวอร์ชันที่ใหม่กว่า อย่างน้อย 3.8 จากนั้นเรียกใช้บางอย่างเช่น `pip38 install firebase_admin flask venv` และลองทำตามขั้นตอนจากคำถามของคุณด้านบนอีกครั้ง แต่ใช้เวอร์ชันใหม่กับ `python38` แทน python3
KiDo avatar
im flag
ฉันทำตามขั้นตอนเหล่านั้นและดูเหมือนว่าทุกอย่างจะใช้งานได้ ปัญหาเดียวที่เหลืออยู่คือฉันยังไม่สามารถเข้าถึงโดยใช้ IP สาธารณะ (พีซีเครื่องอื่น) ฉันรันด้วย: ```flask run --host=0.0. 0.0``` และฉันเปิดพอร์ต 5,000 แล้ว แต่พยายามตรวจสอบโดยใช้บุรุษไปรษณีย์ส่งคืน Connection Timed Out
us flag
ลองล้างกฎ iptables ถ้าเป็นไปได้ด้วย `iptables -F` และตรวจสอบการเชื่อมต่อ หากได้ผล คุณสามารถสร้างกฎยอมรับ iptables สำหรับพอร์ตนั้นได้ หากไม่ได้ผล ให้ส่งเอาต์พุตเทอร์มินัลขวดให้ฉันระหว่างการเริ่มต้น
KiDo avatar
im flag
[root@ MyAPI]# ขวดทำงาน --host=0.0.0.0 * ให้บริการแอป Flask 'app.py' (โหลดแบบขี้เกียจ) * สิ่งแวดล้อม: การผลิต คำเตือน: นี่คือเซิร์ฟเวอร์สำหรับการพัฒนา ห้ามนำไปใช้ในการปรับใช้จริง เอ็นที ใช้เซิร์ฟเวอร์ WSGI ที่ใช้งานจริงแทน ...
KiDo avatar
im flag
* โหมดดีบัก: ปิด * ทำงานในที่อยู่ทั้งหมด คำเตือน: นี่คือเซิร์ฟเวอร์สำหรับการพัฒนา ห้ามนำไปใช้ในการปรับใช้จริง เอ็นที * ทำงานบน http://serverIP:5000/ (กด CTRL+C เพื่อออก)
us flag
`serverIP:5000` คืออะไร ควรมี `กำลังทำงานบน http://0.0.0.0:5000/` คุณมี app.run สตริงเช่นนั้นหรือไม่ `app.run(host='0.0.0.0', port= 5000)` ภายในแอปหรือดูแตกต่างออกไป? นอกจากนี้คุณควรมีที่อยู่ IP สาธารณะจริง ๆ (ซึ่งไม่เกี่ยวข้องกับช่วงส่วนตัว)
KiDo avatar
im flag
serverIP คือ IP ของเซิร์ฟเวอร์ของฉัน: âââxx.xx.xx.xx:5000âââ และใน app.run ฉันมี âapp run()â เพราะ Flask guide บอกว่าฉันแค่ต้องรันคำสั่งนี้เพื่อทำให้มันเป็นสาธารณะ: âflask run âhost=0.0.0.0â, and I have a public IP, itâ เป็นที่ที่โฮสต์เว็บไซต์ WordPress ของฉัน
us flag
หากคุณพูดเช่นนั้นและคุณไม่สามารถเชื่อมต่อกับ ip สาธารณะและพอร์ต 5000 ได้ แสดงว่าเป็นปัญหาเครือข่ายที่ฝั่งเซิร์ฟเวอร์ OS (เกี่ยวข้องกับกฎการเชื่อมต่ออินพุต) หรือที่ฝั่งของคุณ (เราเตอร์ ผู้ให้บริการอินเทอร์เน็ต ฯลฯ บางสิ่งที่สามารถบล็อกเอาต์พุตที่เชื่อมต่อได้ พอร์ต 5000) คุณสามารถให้ผลลัพธ์ของ `iptables-save` จากนั้นฉันจะดูว่ามีปัญหาบางอย่างหรือไม่
KiDo avatar
im flag
OMG คุณพูดถูก! ฉันพยายามเข้าถึงโดยใช้เครือข่ายอื่นและใช้งานได้! คุณเป็นอัจฉริยะและฉันไม่มีคำใดจะแสดงความขอบคุณและขอบคุณสำหรับความช่วยเหลือของคุณ! ฉันมีคำถามสุดท้ายเพียงข้อเดียว ฉันจะให้มันทำงานในพื้นหลังได้อย่างไร
us flag
คุณสามารถทำตามคำตอบของฉันที่คำถามนี้เพื่อเรียกใช้เป็นบริการ systemd: https://serverfault.com/questions/1078666/how-do-i-create-a-python-3-service-that-uses-socket-with-systemd/1079133#1079133

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา