Có thể trùng lặp: Nhập mô -đun động trong Python
Dynamic module import in Python
Tôi dự định sẽ sớm tạo một bộ tệp vào một lúc nào đó và cách tốt nhất để tổ chức nó là có một danh sách, danh sách đó sẽ ở đầu một tập tin và sau khi nó sẽ có một số lượng mã vô lý để xử lý Danh sách đó kiểm soát những gì và cách nó hoạt động. Tôi đang tìm cách viết danh sách chỉ một lần và Danh sách nói là danh sách các tên thư mục và tệp trong định dạng này:
[[folder/filename, bool, bool, int], [folder/filename, bool, bool, int]]
Như bạn có thể thấy, folder/filename
giống nhau [loại]. Tên tệp là tên thư mục với .py
ở cuối, nhưng thực hiện nhập xxx bạn không cần phải nhập xxx.py, vì vậy tôi không thấy điều này gây ra sự cố.
Vấn đề tôi đang gặp phải là nhập khẩu bằng phương pháp này ...
for [testName, auto, hardware, bit] in testList:
print[testName]
paths = "\\" + testName
print paths
addpath[paths]
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print["Path Added"]
test = testName + ".Helloworld[]"
eval[test]
Vì vậy, đối với mỗi bài kiểm tra tôi có, in tên, lắp ráp một chuỗi chứa đường dẫn ["\\testName"
], cho ví dụ này, in đường dẫn thử nghiệm, sau đó thêm đường dẫn vào danh sách [____10], sau đó in để xác nhận nó đã xảy ra, sau đó Lắp một chuỗi sẽ được thực hiện bởi
for [testName, auto, hardware, bit] in testList:
print[testName]
paths = "\\" + testName
print paths
addpath[paths]
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print["Path Added"]
test = testName + ".Helloworld[]"
eval[test]
1 cho các thử nghiệm mô -đun chính và cuối cùng là đánh giá nó.Như bạn có thể thấy, hiện tại tôi phải có một danh sách nhập khẩu ở đầu. Tôi chỉ đơn giản là nhập
for [testName, auto, hardware, bit] in testList:
print[testName]
paths = "\\" + testName
print paths
addpath[paths]
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print["Path Added"]
test = testName + ".Helloworld[]"
eval[test]
2 [nội dung của for [testName, auto, hardware, bit] in testList:
print[testName]
paths = "\\" + testName
print paths
addpath[paths]
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print["Path Added"]
test = testName + ".Helloworld[]"
eval[test]
2 là tên của mô -đun tôi muốn nhập], vì nó sẽ cố gắng tìm một mô -đun gọi là for [testName, auto, hardware, bit] in testList:
print[testName]
paths = "\\" + testName
print paths
addpath[paths]
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print["Path Added"]
test = testName + ".Helloworld[]"
eval[test]
2, không phải là một mô -đun gọi là nội dung của for [testName, auto, hardware, bit] in testList:
print[testName]
paths = "\\" + testName
print paths
addpath[paths]
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print["Path Added"]
test = testName + ".Helloworld[]"
eval[test]
2.Tôi đã thấy một vài ví dụ về nơi này đã được thực hiện, nhưng không thể tìm thấy bất kỳ công việc nào trong hoàn cảnh của tôi. Nếu ai đó thực sự có thể ném một đoạn mã, điều đó thật tuyệt vời.
Tôi cũng yêu cầu tôi không bị treo, được rút ra, cũng không được sử dụng để sử dụng eval, nó được sử dụng trong một môi trường rất được kiểm soát [danh sách mà nó chu kỳ nằm trong tệp .py, vì vậy không có "người dùng cuối" nên lộn xộn với nó].
Quảng cáo Quảng cáo Sử dụng Nhập khẩu để nhập các mô -đunimportlib! Note that this feature was introduced in Python 3.1 but there is a 2.7 version of importlib though less featured. Sự kết luận Liên kết tham chiếu Sự kết luậnimportlib provides a simple import_module function that accepts a string name with dot separators. It works just like a normal import except it uses a string to store the name. On import, the file is executed and the module object is returned. If you only need the code run on import it is not necessary to store the returned module. # Contrived example of generating a module named as a stringTổng quan
Giới thiệu
Sử dụng Nhập khẩu để nhập các mô -đun
import importlib
full_module_name = "mypackage." + "mymodule"
# The file gets executed upon import, as expected.
mymodule = importlib.import_module[full_module_name]
# Then you can use the module like normal
mymodule.func1[]
mymodule.func2[]
Sự kết luận
Liên kết tham chiếu
Liên kết tham chiếu
- Trong Python, khi xây dựng một công cụ tạo mã hoặc khung, bạn có thể cần lập trình một chuỗi đại diện cho tên của một mô -đun bạn muốn nhập. Làm thế nào bạn sẽ nhập một mô -đun nếu bạn có tên như một chuỗi? Đây là cách làm điều đó với ImportLib! Lưu ý rằng tính năng này đã được giới thiệu trong Python 3.1 nhưng có phiên bản 2.7 của ImportLib mặc dù ít tính năng hơn.
- Tìm hiểu thêm về cách Python tìm kiếm nhập khẩu, cách sử dụng biến môi trường 'pythonpath` và cách sử dụng `sys.path` trong nhập khẩu Python, sys.path và pythonpath của tôi.
- Tìm hiểu thêm về các môi trường ảo Python cho phép bạn tạo môi trường Python bị cô lập với các đường dẫn nhập khác nhau với hướng dẫn môi trường ảo Python của tôi.
- Nhập khẩu cung cấp chức năng Nhập khẩu_Module đơn giản chấp nhận tên chuỗi có dấu phân cách chấm. Nó hoạt động giống như một nhập khẩu bình thường ngoại trừ nó sử dụng một chuỗi để lưu trữ tên. Khi nhập, tệp được thực thi và đối tượng mô -đun được trả về. Nếu bạn chỉ cần mã chạy trên nhập, không cần thiết phải lưu trữ mô -đun được trả về.
Quảng cáo
Quảng cáo
Thông thường, các nhà phát triển nhập các mô -đun trong kịch bản Python bằng cách đề cập đến tên của họ theo nghĩa đen. Đôi khi bạn có thể cần nhập các mô -đun Python bằng các biến chuỗi chứa tên của chúng. Trong bài viết này, chúng tôi sẽ học cách nhập các mô -đun Python bằng tên chuỗi.
Nếu bạn đang sử dụng Python
Hãy để chúng tôi nói rằng bạn có danh sách các chuỗi sau đây trong đó mỗi chuỗi là một tên mô -đun, là chuỗi.
moduleNames = ['sys', 'os', 're', 'unittest']
Nếu bạn chỉ muốn nhập một mô -đun duy nhất bằng __Import__, bạn có thể làm như vậy bằng cách sử dụng chức năng __Import__ trực tiếp. Dưới đây là một ví dụ để chỉ nhập mô -đun Unittest.
__import__['unittest', globals=globals[]]
Dưới đây là lệnh để dễ dàng nhập tất cả các mô -đun được đề cập trong danh sách trên, sử dụng __Import__.
modules = map[__import__, moduleNames]
Ngoài ra, và cũng cho Python> 2.7, bạn có thể sử dụng mô -đun nhập khẩu để nhập các mô -đun bằng chuỗi tên của chúng. Dưới đây là một ví dụ để nhập mô -đun OS.Path.
module = importlib.import_module['os.path']
Trong bài viết này, chúng tôi đã học được cách nhập các mô -đun Python bằng chuỗi tên của chúng.
Cũng đọc:
Gọi chức năng Python theo tên StringHow để lưu tên người dùng git & mật khẩu cách nào để lấy tên phân loại trong pythonhow để khóa tệp trong pythonhow để sử dụng các biến boolean trong script shell
How to Save Git Username & Password
How to Get Classname of Instance in
Python
How to Lock File in Python
How to Use Boolean Variables in Shell Script