คำถามติดแท็ก python-import

สำหรับคำถามเกี่ยวกับการนำเข้าโมดูลใน Python

5
คุณสามารถกำหนดนามแฝงสำหรับโมดูลที่อิมพอร์ตใน Python ได้หรือไม่?
ใน Python เป็นไปได้หรือไม่ที่จะกำหนดนามแฝงสำหรับโมดูลที่อิมพอร์ต ตัวอย่างเช่น import a_ridiculously_long_module_name ... เพื่อที่จะมีนามแฝงของ 'short_name'

1
เหตุใดการใช้จาก __future__ import print_function จึงทำให้การพิมพ์แบบ Python2 แตก [ปิด]
ปิด. คำถามนี้เป็นคำถามที่ไม่สามารถทำซ้ำหรือเกิดจากความผิดพลาด ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันใหม่ในการเขียนโปรแกรมด้วย python และฉันกำลังพยายามพิมพ์โดยใช้ตัวคั่นและสิ้นสุด แต่ก็ยังคงทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์ ฉันใช้ python 2.7 นี่คือรหัสของฉัน: from __future__ import print_function import sys, os, time for x in range(0,10): print x, sep=' ', end='' time.sleep(1) และนี่คือข้อผิดพลาด: $ python2 xy.py File "xy.py", line 5 print x, sep=' ', end='' ^ …

6
ฉันควรใช้ `import os.path` หรือ` import os` หรือไม่
อ้างอิงถึงเอกสารที่เป็นทางการ , os.pathเป็นโมดูล ดังนั้นวิธีการนำเข้าที่ต้องการคืออะไร # Should I always import it explicitly? import os.path หรือ... # Is importing os enough? import os โปรดอย่าตอบ "การนำเข้าosผลงานให้ฉัน" ฉันรู้ว่ามันใช้ได้กับฉันเช่นกันในตอนนี้ (เหมือน Python 2.6) สิ่งที่ฉันอยากรู้คือคำแนะนำอย่างเป็นทางการเกี่ยวกับปัญหานี้ ดังนั้นถ้าคุณตอบคำถามนี้กรุณาโพสต์อ้างอิงของคุณ

21
ไม่มีโมดูลชื่อ _sqlite3
ฉันพยายามเรียกใช้แอปDjangoบนVPS ที่ใช้Debian 5 เมื่อฉันเรียกใช้แอปสาธิตมันกลับมาพร้อมกับข้อผิดพลาดนี้: File "/usr/local/lib/python2.5/site-packages/django/utils/importlib.py", line 35, in import_module __import__(name) File "/usr/local/lib/python2.5/site-packages/django/db/backends/sqlite3/base.py", line 30, in <module> raise ImproperlyConfigured, "Error loading %s: %s" % (module, exc) ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3 เมื่อดูการติดตั้ง Python จะให้ข้อผิดพลาดเดียวกัน: Python 2.5.2 (r252:60911, May 12 …

5
การเพิ่มไดเร็กทอรีไปยัง sys.path / PYTHONPATH
ฉันกำลังพยายามนำเข้าโมดูลจากไดเร็กทอรีเฉพาะ ปัญหาคือถ้าฉันใช้sys.path.append(mod_directory)เพื่อต่อท้ายพา ธ แล้วเปิดตัวแปล python ไดเร็กทอรีmod_directoryจะถูกเพิ่มที่ท้ายรายการ sys.path ถ้าฉันส่งออกPYTHONPATHตัวแปรก่อนเปิดตัวแปล python ไดเร็กทอรีจะถูกเพิ่มไปที่จุดเริ่มต้นของรายการ ในกรณีหลังนี้ฉันสามารถนำเข้าโมดูลได้ แต่ก่อนหน้านี้ฉันทำไม่ได้ มีใครอธิบายได้ไหมว่าทำไมสิ่งนี้จึงเกิดขึ้นและให้วิธีแก้ปัญหาเพื่อเพิ่มmod_directoryการเริ่มต้นภายในสคริปต์ python

9
ข้อผิดพลาดในการนำเข้าจมูก Python
ดูเหมือนจะไม่สามารถรับกรอบการทดสอบจมูกได้เพื่อจดจำโมดูลใต้สคริปต์ทดสอบของฉันในโครงสร้างไฟล์ได้ ฉันได้สร้างตัวอย่างที่ง่ายที่สุดที่แสดงให้เห็นถึงปัญหา ฉันจะอธิบายไว้ด้านล่าง นี่คือโครงสร้างไฟล์แพ็คเกจ: ./__init__.py ./foo.py ./tests ./__init__.py ./test_foo.py foo.py ประกอบด้วย: def dumb_true(): return True การทดสอบ / test_foo.py ประกอบด้วย: import foo def test_foo(): assert foo.dumb_true() ทั้งสอง ไฟล์init. pyว่างเปล่า หากฉันรันnosetests -vvในไดเร็กทอรีหลัก (โดยที่ foo.py อยู่) ฉันจะได้รับ: Failure: ImportError (No module named foo) ... ERROR ====================================================================== ERROR: Failure: ImportError (No module named foo) …

16
ตรวจสอบว่ามีการติดตั้ง Python Package หรือไม่
วิธีใดที่ดีในการตรวจสอบว่ามีการติดตั้งแพ็คเกจในขณะที่อยู่ในสคริปต์ Python หรือไม่? ฉันรู้ว่ามันง่ายจากล่าม แต่ฉันต้องทำภายในสคริปต์ ฉันเดาว่าฉันสามารถตรวจสอบได้ว่ามีไดเรกทอรีในระบบที่สร้างขึ้นระหว่างการติดตั้งหรือไม่ แต่ฉันรู้สึกว่ามีวิธีที่ดีกว่านี้ ฉันพยายามตรวจสอบให้แน่ใจว่าได้ติดตั้งแพ็คเกจ Skype4Py แล้วและหากไม่ติดตั้งฉันจะติดตั้ง ความคิดของฉันในการทำเช็คให้สำเร็จ ตรวจสอบไดเร็กทอรีในพา ธ การติดตั้งทั่วไป ลองนำเข้าแพ็กเกจและหากมีการโยนข้อยกเว้นให้ติดตั้งแพ็กเกจ

8
การมองเห็นตัวแปรส่วนกลางในโมดูลที่นำเข้า
ฉันได้พบกับโมดูลการนำเข้ากำแพงในสคริปต์ Python ฉันจะพยายามอย่างดีที่สุดเพื่ออธิบายข้อผิดพลาดเหตุใดฉันจึงพบปัญหาและเหตุใดฉันจึงผูกแนวทางเฉพาะนี้เพื่อแก้ปัญหาของฉัน (ซึ่งฉันจะอธิบายในไม่กี่วินาที): สมมติว่าฉันมีโมดูลที่ฉันได้กำหนดฟังก์ชัน / คลาสยูทิลิตี้บางอย่างซึ่งอ้างถึงเอนทิตีที่กำหนดไว้ในเนมสเปซที่จะนำเข้าโมดูลเสริมนี้ (ให้ "a" เป็นเอนทิตีดังกล่าว): โมดูล 1: def f(): print a จากนั้นฉันก็มีโปรแกรมหลักโดยที่ "a" ถูกกำหนดซึ่งฉันต้องการนำเข้ายูทิลิตี้เหล่านั้น: import module1 a=3 module1.f() การดำเนินการโปรแกรมจะทำให้เกิดข้อผิดพลาดต่อไปนี้: Traceback (most recent call last): File "Z:\Python\main.py", line 10, in <module> module1.f() File "Z:\Python\module1.py", line 3, in f print a NameError: global name 'a' is not …

8
ImportError: libSM.so.6: ไม่สามารถเปิดไฟล์อ็อบเจ็กต์ที่แบ่งใช้: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
เมื่อพยายามนำเข้า OpenCV โดยใช้import cv2ฉันได้รับข้อผิดพลาดต่อไปนี้: /usr/local/lib/python2.7/dist-packages/cv2/__init__.py in <module>() 7 8 # make IDE's (PyCharm) autocompletion happy ----> 9 from .cv2 import * 10 11 # wildcard import above does not import "private" variables like __version__ ImportError: libSM.so.6: cannot open shared object file: No such file or directory ไม่แน่ใจว่าจะแก้ไขอย่างไร - พยายามเล่นกับเครื่องมือColaboratoryใหม่ของ Google …

11
ปัญหาการนำเข้าที่ไม่ได้รับการแก้ไขกับ PyDev และ Eclipse
ฉันใหม่มากกับ PyDev และ Python แม้ว่าฉันจะใช้ Eclipse กับ Java มากมาย ฉันพยายามทำงานผ่านตัวอย่าง Dive Into Python และรู้สึกว่าเป็นปัญหาที่ไม่สำคัญอย่างยิ่งที่กลายเป็นเรื่องน่ารำคาญอย่างมาก ฉันใช้ Ubuntu Linux 10.04 ฉันต้องการใช้ไฟล์ odbchelper.py ซึ่งอยู่ในไดเร็กทอรี /Desktop/Python_Tutorials/diveintopython/py นี่คือไฟล์ example.py ของฉันที่ฉันกำลังทำงานอยู่ในโครงการ PyDev / Eclipse ของฉัน: import sys sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py") ใช้งานได้ดี แต่ฉันต้องการให้บรรทัดถัดไปของรหัสเป็น: import odbchelper และทำให้เกิดข้อผิดพลาดในการนำเข้าที่ไม่ได้รับการแก้ไขทุกครั้ง ฉันได้เพิ่ม__init__.pyไฟล์ไปเพียงเกี่ยวกับทุกไดเรกทอรีที่เป็นไปได้และมันก็ไม่ได้ช่วยอะไร ฉันได้ลองเพิ่ม__init__.pyไฟล์ทีละไฟล์ในระดับต่างๆของไดเร็กทอรีระหว่างตำแหน่งโปรเจ็กต์และไฟล์ odbchelper.py และฉันได้ลองเพิ่ม__init__.pyไฟล์ไปยังไดเร็กทอรีทั้งหมดพร้อมกัน ไม่ทำงาน สิ่งที่ฉันต้องการทำคือมีโปรเจ็กต์อยู่ที่ไหนสักแห่งในไดเร็กทอรีอื่นพูด/Desktop/MyStuff/Projectซึ่งฉันมี example.py ... จากนั้นจาก example.py ฉันต้องการนำเข้า odbchelper.py จาก/Desktop/Python_Tutorials/diveintopython/py/ …

5
แสดงรายการโมดูลทั้งหมดที่เป็นส่วนหนึ่งของแพ็คเกจ python?
มีวิธีที่ตรงไปตรงมาในการค้นหาโมดูลทั้งหมดที่เป็นส่วนหนึ่งของแพ็คเกจ python หรือไม่? ฉันพบการสนทนาเก่า ๆ นี้ซึ่งยังไม่สามารถสรุปได้ แต่ฉันอยากได้คำตอบที่ชัดเจนก่อนที่จะเปิดตัวโซลูชันของตัวเองโดยใช้ os.listdir ()

5
ควรใช้ os.name, sys.platform หรือ platform.system เมื่อใด
เท่าที่ฉันรู้ Python มี 3 วิธีในการค้นหาว่าระบบปฏิบัติการใดกำลังทำงานอยู่: os.name sys.platform platform.system() การทราบข้อมูลนี้มักมีประโยชน์ในการนำเข้าแบบมีเงื่อนไขหรือการใช้ฟังก์ชันการทำงานที่แตกต่างกันระหว่างแพลตฟอร์มต่างๆ (เช่นtime.clock()บน Windows เทียบtime.time()กับ UNIX) คำถามของฉันคือทำไมถึงทำสิ่งนี้ได้ 3 วิธี ควรใช้วิธีใดวิธีหนึ่งไม่ใช่วิธีอื่น วิธีใดเป็นวิธีที่ 'ดีที่สุด' (การพิสูจน์ในอนาคตส่วนใหญ่หรือโอกาสน้อยที่สุดที่จะยกเว้นระบบใดระบบหนึ่งซึ่งโปรแกรมของคุณสามารถทำงานได้โดยไม่ได้ตั้งใจ) ดูเหมือนว่าsys.platformจะเฉพาะเจาะจงมากกว่าos.nameทำให้คุณสามารถแยกแยะwin32จากcygwin(ตรงข้ามกับ just nt) และlinux2จากdarwin(ตรงข้ามกับ justposix ) แต่ถ้าเป็นเช่นนั้นแล้วความแตกต่างระหว่างsys.platformและplatform.system()ล่ะ? ตัวอย่างเช่นซึ่งดีกว่าสิ่งนี้: import sys if sys.platform == 'linux2': # Do Linux-specific stuff หรือนี่? : import platform if platform.system() == 'Linux': # Do Linux-specific stuff …

12
Python: วิธีที่ดีที่สุดในการเพิ่มลงใน sys.path โดยสัมพันธ์กับสคริปต์ที่รันอยู่ในปัจจุบัน
ฉันมีไดเรกทอรีที่เต็มไปด้วยสคริปต์ (สมมติว่าproject/bin) ฉันยังมีไลบรารีอยู่project/libและต้องการให้สคริปต์โหลดโดยอัตโนมัติ นี่คือสิ่งที่ฉันใช้ตามปกติที่ด้านบนของแต่ละสคริปต์: #!/usr/bin/python from os.path import dirname, realpath, sep, pardir import sys sys.path.append(dirname(realpath(__file__)) + sep + pardir + sep + "lib") # ... now the real code import mylib มันยุ่งยากน่าเกลียดและต้องวางที่จุดเริ่มต้นของทุกไฟล์ มีวิธีที่ดีกว่านี้หรือไม่? สิ่งที่ฉันหวังไว้จริงๆคือสิ่งที่ราบรื่นเช่นนี้: #!/usr/bin/python import sys.path from os.path import pardir, sep sys.path.append_relative(pardir + sep + "lib") import mylib หรือที่ดีกว่านั้นคือสิ่งที่จะไม่พังเมื่อผู้แก้ไขของฉัน …

9
Python: โหลดคอมโพเนนต์ Y ที่นำเข้าด้วย 'from X import Y'?
ใน Python เมื่อฉันนำเข้าโมดูล X ในเซสชันล่ามโดยใช้import Xและโมดูลเปลี่ยนไปด้านนอกฉันสามารถโหลดโมดูลใหม่ด้วยreload(X). การเปลี่ยนแปลงจะพร้อมใช้งานในเซสชั่นล่ามของฉัน ฉันสงสัยว่าสิ่งนี้เป็นไปได้หรือไม่เมื่อฉันนำเข้าส่วนประกอบ Y จากโมดูล X โดยใช้from X import Yไฟล์. คำสั่งreload Yไม่ทำงานเนื่องจาก Y ไม่ใช่โมดูลเอง แต่เป็นเพียงส่วนประกอบ (ในกรณีนี้คือคลาส) ภายในโมดูล เป็นไปได้หรือไม่ที่จะโหลดส่วนประกอบแต่ละส่วนของโมดูลโดยไม่ต้องออกจากเซสชันล่าม (หรือนำเข้าโมดูลทั้งหมด) แก้ไข: เพื่อความกระจ่างคำถามเกี่ยวกับการนำเข้าคลาสหรือฟังก์ชัน Yจากโมดูล Xและการโหลดการเปลี่ยนแปลงใหม่ไม่ใช่โมดูล Y จากแพ็คเกจ X

6
PYTHONPATH เทียบกับ sys.path
นักพัฒนารายอื่นและฉันไม่เห็นด้วยว่าควรใช้ PYTHONPATH หรือ sys.path เพื่อให้ Python ค้นหาแพ็คเกจ Python ในไดเร็กทอรีผู้ใช้ (เช่นการพัฒนา) เรามีโครงการ Python ที่มีโครงสร้างไดเรกทอรีทั่วไป: Project setup.py package __init__.py lib.py script.py ใน script.py import package.libเราต้องทำ เมื่อแพคเกจที่ติดตั้งในเว็บไซต์แพคเกจ script.py package.libสามารถค้นหา อย่างไรก็ตามเมื่อทำงานจากไดเร็กทอรีผู้ใช้จำเป็นต้องทำอย่างอื่น วิธีแก้ปัญหาของฉันคือตั้งค่า PYTHONPATH ของฉันให้รวม "~ / Project" นักพัฒนารายอื่นต้องการใส่โค้ดบรรทัดนี้ไว้ที่ส่วนต้นของ script.py: sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) เพื่อให้ Python สามารถค้นหาสำเนาภายในเครื่องของpackage.lib. ฉันคิดว่านี่เป็นความคิดที่ไม่ดีเนื่องจากบรรทัดนี้มีประโยชน์สำหรับนักพัฒนาหรือผู้ที่ทำงานจากสำเนาในเครื่องเท่านั้น แต่ฉันไม่สามารถให้เหตุผลที่ดีได้ว่าทำไมจึงเป็นความคิดที่ไม่ดี เราควรใช้ PYTOHNPATH, sys.path หรือไม่?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.