Hướng dẫn how do you set a path to import in python? - làm cách nào để bạn đặt đường dẫn để nhập trong python?

77

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Mã của tôi là:

import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

Nhưng scriptlib nằm trong một số thư mục khác, vì vậy tôi sẽ phải bao gồm thư mục đó trong biến môi trường "PythonPath".

Dù sao đi nữa, trước tiên tôi có thể thêm thư mục scriptlib trong biến môi trường "PythonPath" trước khi câu lệnh nhập được thực thi như:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

Nếu vậy, giá trị chỉ cho lời nhắc lệnh đó hay là toàn cầu?

Cảm ơn trước

Đã hỏi ngày 27 tháng 2 năm 2013 lúc 10:20Feb 27, 2013 at 10:20

Hướng dẫn how do you set a path to import in python? - làm cách nào để bạn đặt đường dẫn để nhập trong python?

1

Điều này sẽ thêm một đường dẫn đến quy trình / phiên bản Python của bạn (nghĩa là có thể thực thi đang chạy). Đường dẫn sẽ không được sửa đổi cho bất kỳ quy trình Python nào khác. Một chương trình Python đang chạy khác sẽ không được sửa đổi đường dẫn và nếu bạn thoát khỏi chương trình của mình và chạy lại, đường dẫn sẽ không bao gồm những gì bạn đã thêm trước đó. Bạn đang làm gì nói chung là chính xác.

set.py:

import sys
sys.path.append("/tmp/TEST")

loop.py

import sys
import time
while True:
  print sys.path
  time.sleep(1)

Chạy:

import sys
sys.path.append("/tmp/TEST")
0

Điều này sẽ chạy Loop.py, được kết nối với stdout của bạn và nó sẽ tiếp tục chạy ở chế độ nền. Sau đó, bạn có thể chạy

import sys
sys.path.append("/tmp/TEST")
1. Mỗi bộ có một bộ biến môi trường khác nhau. Quan sát rằng đầu ra từ
import sys
sys.path.append("/tmp/TEST")
2 không thay đổi vì
import sys
sys.path.append("/tmp/TEST")
3 không thay đổi môi trường của ____ 22.

Một lưu ý về nhập khẩu

Nhập khẩu Python là động, giống như phần còn lại của ngôn ngữ. Không có liên kết tĩnh đang diễn ra. Nhập là một dòng thực thi, giống như

import sys
sys.path.append("/tmp/TEST")
5.

Đã trả lời ngày 27 tháng 2 năm 2013 lúc 10:24Feb 27, 2013 at 10:24

JoejoeJoe

45.3K32 Huy hiệu vàng147 Huy hiệu bạc238 Huy hiệu đồng32 gold badges147 silver badges238 bronze badges

2

Như đã lưu ý trong các tài liệu ở đây.

Truy cập

import sys
sys.path.append("/tmp/TEST")
6 (Windows) hoặc
import sys
sys.path.append("/tmp/TEST")
7 (Linux) và thêm các dòng này vào
import sys
sys.path.append("/tmp/TEST")
8 ở đó,

import sys
sys.path.append("yourpathstring")

Điều này thay đổi

import sys
sys.path.append("/tmp/TEST")
9 của bạn để trên mỗi tải, nó sẽ có giá trị đó trong đó ..

Như đã nêu ở đây về

import sys
sys.path.append("/tmp/TEST")
8,

Mô -đun này được tự động nhập trong quá trình khởi tạo. Nhập mô-đun này sẽ nối các đường dẫn dành riêng cho trang web vào đường dẫn tìm kiếm mô-đun và thêm một vài tích hợp. Importing this module will append site-specific paths to the module search path and add a few builtins.

Đối với các phương pháp có thể khác để thêm một số đường dẫn vào

import sys
sys.path.append("/tmp/TEST")
9, hãy xem các tài liệu này

Đã trả lời ngày 27 tháng 2 năm 2013 lúc 10:36Feb 27, 2013 at 10:36

Pradyunsgpradyunsgpradyunsg

17.1k11 Huy hiệu vàng42 Huy hiệu bạc92 Huy hiệu Đồng11 gold badges42 silver badges92 bronze badges

5

Giới thiệu

Tuyên bố

import sys
import time
while True:
  print sys.path
  time.sleep(1)
2 thường là điều đầu tiên bạn thấy ở đầu bất kỳ tệp Python nào. Chúng tôi sử dụng nó mọi lúc, nhưng nó vẫn còn một chút bí ẩn đối với nhiều người. Hướng dẫn này sẽ đi qua cách nhập hoạt động và cách xem và sửa đổi các thư mục được sử dụng để nhập.

Nếu bạn muốn tìm hiểu cách nhập một mô -đun bằng cách sử dụng tên biến chuỗi để tham chiếu mô -đun, hãy xem hướng dẫn của tôi về Nhập mô -đun Python bằng tên chuỗi

Ngoài ra, hãy xem hướng dẫn môi trường ảo Python của tôi để tìm hiểu thêm về môi trường Python bị cô lập.

Mô -đun so với các gói

Đầu tiên, hãy làm rõ sự khác biệt giữa các mô -đun và gói. Họ có liên quan rất chặt chẽ, và thường bối rối. Cả hai đều phục vụ cùng một mục đích là tổ chức mã, nhưng mỗi người cung cấp những cách hơi khác nhau để làm điều đó.

  • Một mô -đun là một tệp
    import sys
    import time
    while True:
      print sys.path
      time.sleep(1)
    
    3 duy nhất với mã Python.
  • Gói là một thư mục có thể chứa nhiều mô -đun Python.

Một mô-đun có thể được coi là một gói khép kín và một gói giống như một mô-đun được phân tách trên nhiều tệp. Nó thực sự phụ thuộc vào cách bạn muốn tổ chức mã của bạn và dự án của bạn lớn như thế nào. Tôi luôn bắt đầu với một mô -đun và biến nó thành một gói nếu cần sau.

Nhập hoạt động như thế nào

Từ khóa

import sys
import time
while True:
  print sys.path
  time.sleep(1)
2 trong Python được sử dụng để tải các tệp mã nguồn Python khác vào phiên phiên dịch hiện tại. Đây là cách bạn sử dụng lại mã và chia sẻ nó giữa nhiều tệp hoặc các dự án khác nhau.

Có một vài cách khác nhau để sử dụng

import sys
import time
while True:
  print sys.path
  time.sleep(1)
2. Ví dụ: nếu chúng ta muốn sử dụng hàm
import sys
import time
while True:
  print sys.path
  time.sleep(1)
6 sống trong mô -đun
import sys
import time
while True:
  print sys.path
  time.sleep(1)
7 của gói
import sys
import time
while True:
  print sys.path
  time.sleep(1)
8. Tên đầy đủ của nó sẽ là
import sys
import time
while True:
  print sys.path
  time.sleep(1)
9. Chúng tôi có một vài cách nhập và sử dụng chức năng. Đọc thêm về gói
import sys
import time
while True:
  print sys.path
  time.sleep(1)
8 tại https://docs.python.org/3/l Library/os.path.html.

Nhập khẩu so với từ

Có một vài cách khác nhau bạn có thể nhập gói hoặc mô -đun. Bạn có thể gọi trực tiếp

import sys
import time
while True:
  print sys.path
  time.sleep(1)
2 hoặc sử dụng định dạng
import sys
sys.path.append("yourpathstring")
2. Từ khóa
import sys
sys.path.append("yourpathstring")
3 cho Python biết gói hoặc mô -đun nào để tìm tên được chỉ định với
import sys
import time
while True:
  print sys.path
  time.sleep(1)
2. Dưới đây là một vài ví dụ mà tất cả đều hoàn thành cùng một mục tiêu cuối cùng.

Các cách khác nhau để nhập và thực hiện

import sys
import time
while True:
  print sys.path
  time.sleep(1)
9:

import os
os.path.join()
from os import path
path.join()
from os import *
path.join()
from os.path import join
join()

Như bạn có thể thấy, bạn có thể nhập toàn bộ gói, một mô -đun cụ thể trong một gói, một chức năng cụ thể từ trong một mô -đun. Rạn dại

import sys
sys.path.append("yourpathstring")
6 có nghĩa là tải tất cả các mô -đun và chức năng. Tôi không khuyên bạn nên sử dụng ký tự đại diện vì nó quá mơ hồ. Tốt hơn là liệt kê rõ ràng mỗi lần nhập để bạn có thể xác định nó đến từ đâu. Một IDE tốt như Pycharm sẽ giúp bạn quản lý những điều này một cách dễ dàng.

Khi bạn gọi

import sys
import time
while True:
  print sys.path
  time.sleep(1)
2 trong trình thông dịch Python tìm kiếm thông qua một bộ thư mục cho tên được cung cấp. Danh sách các thư mục mà nó tìm kiếm được lưu trữ trong
import sys
sys.path.append("/tmp/TEST")
9 và có thể được sửa đổi trong thời gian chạy. Để sửa đổi các đường dẫn trước khi bắt đầu Python, bạn có thể sửa đổi biến môi trường
import sys
sys.path.append("yourpathstring")
9. Cả
import sys
sys.path.append("/tmp/TEST")
9 và
import sys
sys.path.append("yourpathstring")
9 đều được đề cập nhiều hơn bên dưới.

Nhập theo chuỗi

Nếu bạn muốn nhập một mô -đun theo chương trình, bạn có thể sử dụng

import os
os.path.join()
2. Chức năng này rất hữu ích nếu bạn đang tạo một hệ thống plugin trong đó các mô-đun cần được tải theo thời gian chạy dựa trên tên chuỗi.

from importlib import import_module

# String should match the same format you would normally use to import
my_module = import_module("my_package.my_module")

# Then you can use it as if you did `import my_package.my_module`
my_module.my_function()

Phương pháp này không được sử dụng phổ biến và chỉ hữu ích trong các trường hợp đặc biệt. Ví dụ: nếu bạn đang xây dựng một hệ thống plugin nơi bạn muốn tải mọi tệp trong thư mục dưới dạng mô -đun dựa trên chuỗi FilePath.

Cách __init__ và __main__ hoạt động

Những cái tên bắt đầu và kết thúc với các dấu gạch dưới kép, thường được gọi là 'Dunders', là những cái tên đặc biệt trong Python. Hai trong số chúng là các tên đặc biệt liên quan đến các mô -đun và gói:

import os
os.path.join()
3 và
import os
os.path.join()
4. Tùy thuộc vào việc bạn đang tổ chức mã của mình như một gói hay mô -đun, chúng được đối xử hơi khác nhau.

Chúng tôi sẽ xem xét sự khác biệt giữa một mô -đun và gói trong một khoảnh khắc, nhưng ý tưởng chính là:

  • Khi bạn nhập gói, nó chạy tệp
    import os
    os.path.join()
    
    5 bên trong thư mục gói.
  • Khi bạn thực thi gói (ví dụ:
    import os
    os.path.join()
    
    6), nó sẽ thực thi tệp
    import os
    os.path.join()
    
    7.
  • Khi bạn nhập một mô -đun, nó chạy toàn bộ tệp từ trên xuống dưới.
  • Khi bạn thực hiện một mô-đun IR chạy toàn bộ tệp từ từ trên xuống dưới và đặt biến
    import os
    os.path.join()
    
    8 thành chuỗi
    import os
    os.path.join()
    
    9.

Trong một gói

Trong gói Python (một thư mục), bạn có thể có một mô -đun có tên

import os
os.path.join()
5 và một mô -đun khác có tên
import os
os.path.join()
7.

Dưới đây là một cấu trúc ví dụ của một gói:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
0

Nếu một gói được gọi trực tiếp (ví dụ:

import os
os.path.join()
6), mô -đun
import os
os.path.join()
7 được thực thi. Tệp
import os
os.path.join()
5 được thực thi khi gói được nhập (ví dụ:
from os import path
path.join()
5).

Trong một mô -đun

Trong phần trước, chúng tôi đã thấy cách một gói có thể có các tệp riêng cho

import os
os.path.join()
5 và
import os
os.path.join()
7. Trong một mô -đun (một tệp .py) tương đương với
import os
os.path.join()
3 và
import os
os.path.join()
4 được chứa trong tệp đơn. Toàn bộ chính nó về cơ bản trở thành cả
import os
os.path.join()
5 và
import os
os.path.join()
7.

Khi một mô -đun được nhập, nó chạy toàn bộ tệp, tải bất kỳ chức năng nào được xác định.

Khi một mô -đun được gọi trực tiếp, ví dụ,

from os import *
path.join()
2 hoặc
from os import *
path.join()
3, thì nó thực hiện tương tự như nhập nó, nhưng cũng đặt biến
import os
os.path.join()
8 cho chuỗi
import os
os.path.join()
9.

Bạn có thể tận dụng điều này và thực hiện một phần mã nếu mô -đun được gọi trực tiếp và không phải khi nó được nhập. Để làm điều này, bạn cần kiểm tra rõ ràng biến

import os
os.path.join()
8 và xem nó có bằng
import os
os.path.join()
4 không. Nếu nó được đặt thành chuỗi
import os
os.path.join()
4, thì bạn sẽ biết mô -đun được gọi trực tiếp và không chỉ đơn giản là nhập.

Lấy ví dụ này. Tạo một tệp có tên

from os import *
path.join()
9 với các nội dung sau:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
1

Hãy thử một vài điều khác nhau để hiểu cách thức hoạt động của nó:

  • Chạy tệp trực tiếp với Python:
    from os import *
    path.join()
    
    2
  • Gọi mô -đun bằng cờ
    from os.path import join
    join()
    
    1:
    from os import *
    path.join()
    
    3
  • Nhập mô -đun từ một tệp Python khác:
    from os.path import join
    join()
    
    3
  • Nhập và gọi hàm được xác định:
    from os.path import join
    join()
    
    4

Quản lý đường dẫn nhập

sys.path

Khi bạn bắt đầu một trình thông dịch Python, một trong những điều nó tạo tự động là một danh sách chứa tất cả các thư mục mà nó sẽ sử dụng để tìm kiếm các mô -đun khi nhập. Danh sách này có sẵn trong một biến có tên

import sys
sys.path.append("/tmp/TEST")
9. Dưới đây là một ví dụ về in ra
import sys
sys.path.append("/tmp/TEST")
9. Lưu ý rằng mục
from os.path import join
join()
7 trống có nghĩa là thư mục hiện tại.

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
2

Bạn được phép sửa đổi

import sys
sys.path.append("/tmp/TEST")
9 trong thời gian chạy. Chỉ cần chắc chắn sửa đổi nó trước khi bạn gọi
import sys
import time
while True:
  print sys.path
  time.sleep(1)
2. Nó sẽ tìm kiếm các thư mục theo thứ tự dừng ở nơi đầu tiên nó tìm thấy các mô -đun được chỉ định.

Pythonpath

import sys
sys.path.append("yourpathstring")
9 có liên quan đến
import sys
sys.path.append("/tmp/TEST")
9 rất chặt chẽ.
import sys
sys.path.append("yourpathstring")
9 là một biến môi trường mà bạn đặt trước khi chạy trình thông dịch Python.
import sys
sys.path.append("yourpathstring")
9, nếu nó tồn tại, nên chứa các thư mục nên được tìm kiếm các mô -đun khi sử dụng
import sys
import time
while True:
  print sys.path
  time.sleep(1)
2. Nếu
import sys
sys.path.append("yourpathstring")
9 được thiết lập, Python sẽ bao gồm các thư mục trong
import sys
sys.path.append("/tmp/TEST")
9 để tìm kiếm. Sử dụng một dấu chấm phẩy để tách nhiều thư mục.

Dưới đây là một ví dụ về việc thiết lập biến môi trường trong Windows và liệt kê các đường dẫn trong Python:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
3

Và trong Linux và Mac, bạn có thể làm tương đương như thế này:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
4

Vì vậy, để nhập các mô -đun hoặc gói, họ cần cư trú trong một trong các đường dẫn được liệt kê trong

import sys
sys.path.append("/tmp/TEST")
9. Bạn có thể sửa đổi danh sách
import sys
sys.path.append("/tmp/TEST")
9 theo cách thủ công nếu cần từ bên trong Python. Nó chỉ là một
from importlib import import_module

# String should match the same format you would normally use to import
my_module = import_module("my_package.my_module")

# Then you can use it as if you did `import my_package.my_module`
my_module.my_function()
9 thông thường để nó có thể được sửa đổi theo tất cả các cách thông thường. Ví dụ: bạn có thể nối vào cuối danh sách bằng cách sử dụng
import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
00 hoặc để chèn vào vị trí tùy ý bằng cách sử dụng
import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
01. Để biết thêm trợ giúp, hãy tham khảo https://docs.python.org/3/tutorial/datsturations.html

Các mô -đun trang web

Bạn cũng có thể sử dụng mô -đun

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
02 để sửa đổi
import sys
sys.path.append("/tmp/TEST")
9. Xem thêm tại https://docs.python.org/3/l Library/site.html.

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
5

Ví dụ đầu ra:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
6

Bạn cũng có thể trực tiếp gọi mô -đun trang web để có danh sách các đường dẫn mặc định:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
7

Chạy ví dụ:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
8

Pythonhome

Biến môi trường

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
04 tương tự như
import sys
sys.path.append("yourpathstring")
9 ngoại trừ nó nên xác định vị trí của các thư viện tiêu chuẩn. Nếu
import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
04 được đặt, nó sẽ giả sử một số đường dẫn mặc định so với nhà, có thể được bổ sung với
import sys
sys.path.append("yourpathstring")
9.

Điều này đặc biệt có liên quan nếu bạn nhúng python vào ứng dụng C và nó đang cố gắng xác định đường dẫn của Python bằng biến môi trường

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
04.

Chỉ để tham khảo, đây là một ví dụ nhanh về cách bạn sẽ xây dựng một ứng dụng C với Python được nhúng trong đó.

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations
9

Sự kết luận

Sau khi đọc điều này, bạn nên hiểu rõ hơn về cách tuyên bố ____32 của Python hoạt động và cách biến môi trường

import sys
sys.path.append("yourpathstring")
9 và
import sys
sys.path.append("/tmp/TEST")
9 ảnh hưởng đến
import sys
import time
while True:
  print sys.path
  time.sleep(1)
2. Bạn cũng nên hiểu sự khác biệt và điểm tương đồng giữa các mô -đun và gói, Dunders
import os
os.path.join()
3 và
import os
os.path.join()
4 và cách sử dụng chúng một cách hiệu quả.

Người giới thiệu

  • https://docs.python.org/3/library/os.path.html
  • https://docs.python.org/3/tutorial/datastructures.html
  • https://docs.python.org/3/library/site.html
  • Nhập mô -đun Python theo tên chuỗi
  • Hướng dẫn môi trường ảo Python

Làm thế nào để bạn đặt đường dẫn nhập trong Python?

Chức năng nối (). Đây là cách dễ nhất để nhập mô -đun Python bằng cách thêm đường dẫn mô -đun vào biến đường dẫn. Biến đường dẫn chứa các thư mục thông dịch viên Python tìm kiếm để tìm các mô -đun được nhập trong các tệp nguồn.. This is the easiest way to import a Python module by adding the module path to the path variable. The path variable contains the directories Python interpreter looks in for finding modules that were imported in the source files.

Làm cách nào để tạo ra một con đường Python?

Nhấp chuột phải vào máy tính của tôi và nhấp vào các thuộc tính ..
Nhấp vào cài đặt hệ thống nâng cao ..
Nhấp vào tab biến môi trường ..
Nhấp vào tab mới của các biến người dùng ..
Viết đường dẫn trong tên biến ..
Sao chép đường dẫn của thư mục Python ..
PASTE PATH của python trong giá trị biến.Nhấp vào nút OK: Nhấp vào nút OK:.

Làm cách nào để đặt đường dẫn Python vĩnh viễn của tôi?

Đặt Pythonpath vĩnh viễn hơn..
Mở thiết bị đầu cuối.App;.
Mở tệp ~/.bash_profile trong trình soạn thảo văn bản của bạn - ví dụ:nguyên tử ~/.bash_profile;.
Thêm dòng sau vào cuối: Xuất pythonpath = "/người dùng/my_user/code".
Lưu các tập tin..
Đóng thiết bị đầu cuối.App;.
Bắt đầu Terminal.App một lần nữa, để đọc trong cài đặt mới và nhập cái này:.

Làm cách nào để nhập một mô -đun được đưa ra đường dẫn đầy đủ?

Làm thế nào để nhập một mô -đun cho đường dẫn đầy đủ..
Sử dụng mô -đun nhập khẩu ..
Sử dụng lớp SourceFileloader ..
Sử dụng SYS.đường dẫn.chức năng nối () ..
Thêm tệp __init__ vào thư mục chứa mô -đun và sau đó nhập nó ..