Hướng dẫn how do you call a module from another directory in python? - làm thế nào để bạn gọi một mô-đun từ một thư mục khác trong python?

Trong Python 3.4 trở lên, bạn có thể nhập trực tiếp từ tệp nguồn (liên kết đến tài liệu). Đây không phải là giải pháp đơn giản nhất, nhưng tôi bao gồm câu trả lời này cho sự hoàn chỉnh.

Đây là một ví dụ. Đầu tiên, tệp được nhập, được đặt tên là

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
1:

def announce():
    print("Imported!")

Mã nhập tệp ở trên, được truyền cảm hứng rất nhiều bởi ví dụ trong tài liệu:

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()

Đầu ra:


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!

Lưu ý rằng tên biến, tên mô -đun và tên tệp không cần phải khớp. Mã này vẫn hoạt động:

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

baz = module_from_file("bar", "/path/to/foo.py")

if __name__ == "__main__":
    print(baz)
    print(dir(baz))
    baz.announce()

Đầu ra:


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!

Lưu ý rằng tên biến, tên mô -đun và tên tệp không cần phải khớp. Mã này vẫn hoạt động:

Các mô -đun chỉ đơn giản là một tệp python .py mà chúng ta có thể sử dụng các chức năng, lớp, biến trong một tệp khác. Để sử dụng những thứ này trong một tệp khác, trước tiên chúng ta cần nhập mô -đun đó vào tệp đó. Nếu mô -đun tồn tại trong cùng một thư mục với tệp, chúng ta có thể trực tiếp nhập nó bằng cách sử dụng cú pháp nhập mô -đun_name. Nhưng nếu nó tồn tại trong một thư mục khác, chúng ta không thể trực tiếp nhập nó. Trong bài viết này, chúng tôi sẽ thảo luận về nhiều cách khác nhau trong đó các mô -đun có thể được nhập từ bên ngoài thư mục.

Cây thư mục của chúng tôi sẽ như sau:

D :\projects\base
|__main.py   
|__app:
      |__modules
           |___mod.py

Chúng tôi có một thư mục có tên ‘cơ sở trong các dự án D: \ và trong thư mục cơ sở, chúng tôi có một thư mục có tên là ứng dụng. Thư mục cơ sở chứa main.py mà chúng tôi sẽ nhập mô -đun. Thư mục ứng dụng chứa một thư mục khác có tên các mô -đun chứa mod.py là mô -đun cần được nhập.

Chúng tôi sẽ giữ mã của cả hai tệp đơn giản nhất có thể để giải thích tốt hơn:

mod.py:

Python

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
2
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
3

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
4
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
5
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
6
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
7
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
8

Bây giờ chúng tôi sẽ nhập mô -đun mod.py và gọi chức năng của nó xin chào trong main.py bằng các phương thức khác nhau. & Nbsp;

Phương pháp 1: Sử dụng sys.path.append ()

Biến sys.path của mô -đun SYS chứa danh sách tất cả các thư mục trong đó Python sẽ tìm kiếm một mô -đun để nhập. Chúng ta có thể trực tiếp gọi phương pháp này để xem các thư mục mà nó chứa. Vì vậy, để nhập mod.py trong main.py, chúng tôi sẽ nối đường dẫn của mod.py trong sys.path để nhập các tìm kiếm python mod.py trong các thư mục của nó và tìm thấy nó để nhập thành công. Mã cho phương pháp này sẽ là:

Python

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
2
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
3


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
1

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
2

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
3

Bây giờ chúng tôi sẽ nhập mô -đun mod.py và gọi chức năng của nó xin chào trong main.py bằng các phương thức khác nhau. & Nbsp;


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
6

Output:

hello geeks!

Phương pháp 1: Sử dụng sys.path.append ()

Biến sys.path của mô -đun SYS chứa danh sách tất cả các thư mục trong đó Python sẽ tìm kiếm một mô -đun để nhập. Chúng ta có thể trực tiếp gọi phương pháp này để xem các thư mục mà nó chứa. Vì vậy, để nhập mod.py trong main.py, chúng tôi sẽ nối đường dẫn của mod.py trong sys.path để nhập các tìm kiếm python mod.py trong các thư mục của nó và tìm thấy nó để nhập thành công. Mã cho phương pháp này sẽ là:

Python

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
2
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
3


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
9
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

baz = module_from_file("bar", "/path/to/foo.py")

if __name__ == "__main__":
    print(baz)
    print(dir(baz))
    baz.announce()
0
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

baz = module_from_file("bar", "/path/to/foo.py")

if __name__ == "__main__":
    print(baz)
    print(dir(baz))
    baz.announce()
1

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
2

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
3

Bây giờ chúng tôi sẽ nhập mô -đun mod.py và gọi chức năng của nó xin chào trong main.py bằng các phương thức khác nhau. & Nbsp;


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
6

Output:

hello geeks!

Phương pháp 1: Sử dụng sys.path.append ()

Biến sys.path của mô -đun SYS chứa danh sách tất cả các thư mục trong đó Python sẽ tìm kiếm một mô -đun để nhập. Chúng ta có thể trực tiếp gọi phương pháp này để xem các thư mục mà nó chứa. Vì vậy, để nhập mod.py trong main.py, chúng tôi sẽ nối đường dẫn của mod.py trong sys.path để nhập các tìm kiếm python mod.py trong các thư mục của nó và tìm thấy nó để nhập thành công. Mã cho phương pháp này sẽ là:

D :\projects\base
|__main.py 
|__app:
|      |__modules
|          |___mod.py
|          |___init__.py
|__main.py

Hướng dẫn how do you call a module from another directory in python? - làm thế nào để bạn gọi một mô-đun từ một thư mục khác trong python?

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
9

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
0

Python

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
2
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
3

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

baz = module_from_file("bar", "/path/to/foo.py")

if __name__ == "__main__":
    print(baz)
    print(dir(baz))
    baz.announce()
9

Output:

hello geeks!

Bây giờ chúng tôi sẽ nhập mô -đun mod.py và gọi chức năng của nó xin chào trong main.py bằng các phương thức khác nhau. & Nbsp;

Phương pháp 1: Sử dụng sys.path.append ()

Python

import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
2
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

foo = module_from_file("foo", "/path/to/foo.py")

if __name__ == "__main__":
    print(foo)
    print(dir(foo))
    foo.announce()
3

Bây giờ chúng tôi sẽ nhập mô -đun mod.py và gọi chức năng của nó xin chào trong main.py bằng các phương thức khác nhau. & Nbsp;


['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
5

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
6
import importlib.util

def module_from_file(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

baz = module_from_file("bar", "/path/to/foo.py")

if __name__ == "__main__":
    print(baz)
    print(dir(baz))
    baz.announce()
1

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
8

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'announce']
Imported!
9

Phương pháp 1: Sử dụng sys.path.append ()

D :\projects\base
|__main.py   
|__app:
      |__modules
           |___mod.py
3

D :\projects\base
|__main.py   
|__app:
      |__modules
           |___mod.py
4

Output:

hello geeks!

Làm thế nào để bạn gọi một mô -đun trong Python?

Bạn cần sử dụng từ khóa nhập cùng với tên mô -đun mong muốn. Khi thông dịch viên bắt gặp một câu lệnh nhập, nó sẽ nhập mô -đun vào chương trình hiện tại của bạn. Bạn có thể sử dụng các hàm bên trong một mô -đun bằng cách sử dụng toán tử DOT (.) Cùng với tên mô -đun.use the import keyword along with the desired module name. When interpreter comes across an import statement, it imports the module to your current program. You can use the functions inside a module by using a dot(.) operator along with the module name.

Làm cách nào để nhập mô -đun từ thư mục trước?

Để nhập một mô -đun, thư mục có mô -đun đó phải có mặt trên Pythonpath.Đây là một biến môi trường chứa danh sách các gói sẽ được tải bởi Python.Danh sách các gói trình bày trong Pythonpath cũng có mặt trong SYS.Đường dẫn, vì vậy sẽ thêm đường dẫn thư mục cha vào SYS.the directory having that module must be present on PYTHONPATH. It is an environment variable that contains the list of packages that will be loaded by Python. The list of packages presents in PYTHONPATH is also present in sys. path, so will add the parent directory path to the sys.

Lệnh nào được sử dụng để gọi một mô -đun trong Python?

Lệnh nhập được sử dụng để gọi các mô-đun tích hợp và do người dùng xác định trong các tệp Python.import command is used to call the built-in and user-defined modules in Python files.

Làm thế nào để bạn gọi một biến từ một mô -đun khác trong Python?

Để nhập các biến từ một tệp khác, chúng tôi phải nhập tệp đó từ chương trình hiện tại ...
Nhập và sau đó sử dụng.để truy cập biến ..
từ nhập và sử dụng các biến ..
từ nhập * và sau đó sử dụng các biến trực tiếp ..