Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Vì vậy, có rất nhiều câu hỏi khá giống nhau nhưng không có câu trả lời nào để thỏa mãn những gì tôi đang tìm kiếm.

Về cơ bản tôi đang chạy một tập lệnh Python bằng một thư mục tuyệt đối trong dòng lệnh. Trong chính tệp này, tôi muốn nhập một mô -đun/tệp, hiện tôi hiện đang sử dụng một đường dẫn tuyệt đối để thực hiện điều này (sys.path.append(/....). Nhưng tôi muốn sử dụng một đường dẫn tương đối, so với chính tập lệnh. Tất cả những gì tôi có thể làm có phải là một đường dẫn liên quan đến thư mục làm việc hiện tại của tôi.
Within this file itself, I want to import a module/file,I currently use an absolute path to do this (sys.path.append(/....).
But I would like to use a relative path, relative to the script itself.
All I seem to be able to do is append a path relative to my present working directory.

Làm thế nào để tôi làm điều này?

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Đã hỏi ngày 21 tháng 1 năm 2014 lúc 13:08Jan 21, 2014 at 13:08

7

Hai khả năng thay thế dưới đây áp dụng cho cả phiên bản Python 2 và 3. Chọn cách bạn thích. Tất cả các trường hợp sử dụng được bảo hiểm.

ví dụ 1

main script:      /some/path/foo/foo.py
module to import: /some/path/foo/bar/sub/dir/mymodule.py

Thêm vào foo.py

import sys, os
sys.path.append(os.path.join(sys.path[0],'bar','sub','dir'))
from mymodule import MyModule

Ví dụ 2

main script:      /some/path/work/foo/foo.py
module to import: /some/path/work/bar/mymodule.py

Thêm vào foo.py

import sys, os
sys.path.append(os.path.join(os.path.dirname(sys.path[0]),'bar'))
from mymodule import MyModule

Ví dụ 2

  • Giải thích
  • sys.path[0]/some/path/foo trong cả hai ví dụ
  • os.path.join('a','b','c') di động hơn
    import sys, os
    sys.path.append(os.path.join(sys.path[0],'bar','sub','dir'))
    from mymodule import MyModule
    
    0

import sys, os sys.path.append(os.path.join(sys.path[0],'bar','sub','dir')) from mymodule import MyModule 1 di động hơn import sys, os sys.path.append(os.path.join(sys.path[0],'bar','sub','dir')) from mymodule import MyModule 2

Xem thêm

  • Tài liệu về nhập mô -đun:
  • trong Python 2

trong Python 3Feb 7, 2016 at 21:13

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Đã trả lời ngày 7 tháng 2 năm 2016 lúc 21:13oHo

ohooho27 gold badges157 silver badges193 bronze badges

Sys.Path là một danh sách các thư mục trong đó phiên dịch viên Python tìm kiếm các mô -đun. Tâm trí bạn, đây là một danh sách! Khi một mô -đun được yêu cầu trong một tệp dự án, nó sẽ tìm kiếm thông qua từng một trong các thư mục trong danh sách. Nếu mô -đun được đặt trong một trong các thư mục đó, thì mọi thứ đều ổn và dự án của bạn được hiển thị thành công. Tuy nhiên, nếu mô -đun không nằm trong bất kỳ thư mục được liệt kê nào, thì dự án của bạn sẽ không thể tham gia vào thư mục của bạn trong đó mô -đun của bạn được đặt vào danh sách bằng cách sử dụng hàm append (). Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về cách sử dụng sys.path.append () trong Python.

Liệt kê đường dẫn hiện tại

Bằng cách khai báo những điều sau đây, chúng ta có thể kiểm tra đường dẫn Python hiện tại:

Nhập khẩu sys

Frompprintimportpprint pprint import pprint

pprint(sys.path)(sys.path)

Khi viết các chương trình phức tạp bằng Python, cuối cùng chúng tôi sẽ thêm các mô -đun của bên thứ ba hoặc thậm chí tốt hơn, hãy tạo các mô -đun của riêng chúng tôi. Trong mọi trường hợp, chúng tôi không thể giữ mọi tệp Python mà chúng tôi tạo trong một thư mục, chúng tôi có thể muốn sử dụng nhiều thư mục để phân loại đầy đủ các tệp của chúng tôi. Tuy nhiên, vấn đề là chúng tôi có thể cần nhập các mô -đun được tạo bên trái và phải. Trong những trường hợp như vậy, nếu chúng tôi muốn ngăn chặn lỗi ModulenotFound, thì chúng tôi có thể thêm vị trí của thư mục - và quan tâm đến bạn, nó phải là một thư mục, không phải là một tệp - vào sys.path sử dụng sys.path.append ( ) phương pháp.

Mã hóa hạnh phúc!

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Thông tin về các Tác giả

Tôi là một người yêu thích linux và mã.

Sys.Path là một danh sách các thư mục trong đó phiên dịch viên Python tìm kiếm các mô -đun. Tâm trí bạn, đây là một danh sách! Khi một mô -đun được yêu cầu trong một tệp dự án, nó sẽ tìm kiếm thông qua từng một trong các thư mục trong danh sách. Nếu mô -đun được đặt trong một trong các thư mục đó, thì mọi thứ đều ổn và dự án của bạn được hiển thị thành công. Tuy nhiên, nếu mô -đun không nằm trong bất kỳ thư mục được liệt kê nào, thì dự án của bạn sẽ không thể tham gia vào thư mục của bạn trong đó mô -đun của bạn được đặt vào danh sách bằng cách sử dụng hàm append (). Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về cách sử dụng sys.path.append () trong Python.

Liệt kê đường dẫn hiện tại

main.pyfile1.py

Bằng cách khai báo những điều sau đây, chúng ta có thể kiểm tra đường dẫn Python hiện tại: file1

print(file1.secret)(file1.secret)

Ở đây, mô -đun Pprint chỉ được sử dụng để làm cho mọi thứ trông đẹp, vì vậy bạn có thể bỏ qua phần đó và tập trung vào phần còn lại. Tất cả những gì chúng tôi đang cố gắng làm ở đây là in ra sys.path.= “This is the secret phrase”

Đây là những gì chúng tôi nhận được:

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Những gì bạn nhận thấy ở đây là trước hết, nó là một danh sách. Vì vậy, theo danh sách, trước tiên nó sẽ xem xét trong thư mục làm việc hiện tại, sau đó trong các thư mục khác từng người một. Thư mục làm việc hiện tại là thư mục trong đó tập lệnh Python chính - đoạn được thực hiện - được tìm thấy. Hơn nữa, điều này cũng có nghĩa là danh sách này có thể được sửa đổi hoặc chỉnh sửa.

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Thêm một đường dẫn

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Phương thức sys.path.append () được sử dụng cụ thể để thêm một đường dẫn đến các đường dẫn hiện có.

Giả sử bây giờ tôi có hai tệp riêng biệt: main.py và file1.py. Main.py là tệp chính và chúng tôi sẽ cố gắng nhập File1.py (một mô -đun mà chúng tôi đã viết).

Nhập tệp1

bí mật = "Đây là cụm từ bí mật".path.append(“/path/to/dir)

Vì File1.py hoặc mô -đun của chúng tôi nằm trong thư mục làm việc, bạn sẽ có thể in thành công câu bí mật. Điều này là như vậy bởi vì khi trình thông dịch Python tìm kiếm mô -đun được yêu cầu, nó sẽ tìm kiếm trong thư mục làm việc trước và vì mô -đun của chúng tôi có tên File1 nằm trong thư mục làm việc, nó sẽ tự động in ra câu bí mật của chúng tôi.

Bây giờ, giả sử rằng tôi tạo một thư mục trong thư mục làm việc của mình có tên là Thư mục1 và đặt mô -đun của tôi có tên File1 trong đó..path.append(“C:\\path\\to\\dir)

Bây giờ, trong mô -đun File1 là cụm từ bí mật mà chúng tôi đang cố gắng in ra. Trong trường hợp này, nó sẽ không in ra cụm từ bí mật. Tại sao? Bởi vì thông dịch viên đang tìm kiếm trong thư mục trực tuyến1 cho bất kỳ mô -đun nào. Nói cách khác, thư mục làm việc hiện tại là một thành viên của danh sách sys.path nhưng thư mục1, không phải là thành viên của danh sách đó. Vì vậy, lỗi kết quả là lỗi mô -đun - nó không thể tìm thấy hoặc xác định vị trí mô -đun có tên File1.

Để ngăn chặn vấn đề này, bạn cần nói với trình thông dịch Python nơi tìm File1 mô -đun. Đây là nơi phương thức sys.path.append () xuất hiện.

Phương thức sys.path.append () được sử dụng để nối đường dẫn mà chúng tôi muốn vào danh sách hiện có.

main.pyfile1.py

Nhập khẩu sys

Frompprintimportpprint.path.append(‘C:\\Users\\never\\PycharmProjects\\

Khi viết các chương trình phức tạp bằng Python, cuối cùng chúng tôi sẽ thêm các mô -đun của bên thứ ba hoặc thậm chí tốt hơn, hãy tạo các mô -đun của riêng chúng tôi. Trong mọi trường hợp, chúng tôi không thể giữ mọi tệp Python mà chúng tôi tạo trong một thư mục, chúng tôi có thể muốn sử dụng nhiều thư mục để phân loại đầy đủ các tệp của chúng tôi. Tuy nhiên, vấn đề là chúng tôi có thể cần nhập các mô -đun được tạo bên trái và phải. Trong những trường hợp như vậy, nếu chúng tôi muốn ngăn chặn lỗi ModulenotFound, thì chúng tôi có thể thêm vị trí của thư mục - và quan tâm đến bạn, nó phải là một thư mục, không phải là một tệp - vào sys.path sử dụng sys.path.append ( ) phương pháp.)

Bằng cách khai báo những điều sau đây, chúng ta có thể kiểm tra đường dẫn Python hiện tại: file1

print(file1.secret)(file1.secret)

Ở đây, mô -đun Pprint chỉ được sử dụng để làm cho mọi thứ trông đẹp, vì vậy bạn có thể bỏ qua phần đó và tập trung vào phần còn lại. Tất cả những gì chúng tôi đang cố gắng làm ở đây là in ra sys.path.= “This is the secret phrase”

Đây là những gì chúng tôi nhận được:

Đầu ra của hoạt động trước đó như sau:

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Ví dụ #2

Hãy cùng lấy một ví dụ khác, lần này là trên một máy Linux. Hãy giả sử rằng chúng ta có một tệp - main.py.

main.py

Nhập khẩu sys

Frompprintimportpprint pprint import pprint

pprint(sys.path)(sys.path)

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Ở đây, sys.path [0] là trên mạng/home/kalyani, vì đó là nơi đặt Main.py.

Bây giờ, hãy để sửa đổi tập lệnh một chút bằng cách sử dụng phương thức sys.Path.append (). Hãy để sử dụng phương pháp để nối một đường dẫn cụ thể (‘/home/kalyani/thư mục1,) vào sys.path.

main.py

Nhập khẩu sys

Frompprintimportpprint pprint import pprint

Ở đây, sys.path [0] là trên mạng/home/kalyani, vì đó là nơi đặt Main.py..path.append(‘/home/kalyani/directory1’)

pprint(sys.path)(sys.path)

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Bây giờ, hãy để sửa đổi tập lệnh một chút bằng cách sử dụng phương thức sys.Path.append (). Hãy để sử dụng phương pháp để nối một đường dẫn cụ thể (‘/home/kalyani/thư mục1,) vào sys.path.

sys.path.append (‘/home/kalyani/thư mục1,)

Vì vậy, phương thức sys.path.append () đã nối tiếp đường đến cuối danh sách hiện có! Ở đây, xin vui lòng lưu ý rằng việc nối tiếp được thực hiện ở cuối danh sách không ở đầu.

Pythonpath

Có một vấn đề nhỏ bé với những gì chúng tôi vừa làm và đó là chúng tôi đã không đặt vị trí đó vĩnh viễn vào danh sách sys.path. Phương thức sys.path.append () được sử dụng để tạm thời thêm một đường dẫn và như vậy, đường dẫn đó sẽ có giá trị cho một phiên chẳng hạn. Nếu bạn muốn thay đổi vĩnh viễn danh sách sys.path, thì chúng ta có thể sử dụng PythonPath để thêm đường dẫn vào danh sách. Vì Sys.Path cũng xem xét Pythonpath, các vị trí được liệt kê sau đó sẽ được đưa vào danh sách các đường dẫn.=’/path/to/dir

  1. Trên Linux:
  2. xuất PythonPath = xông/path/to/dir
  3. Trên máy Linux của bạn, mở một thiết bị đầu cuối và điều hướng đến thư mục chứa .bashrc.

    Nano .Bashrc=’/home/kalyani/directory1’

Thêm các mục sau ở cuối tệp .bashrc:

  1. Xuất Pythonpath = xông/home/kalyani/thư mục1
  2. Ở đây, bạn có thể thêm đường dẫn mà bạn muốn.

main.py

Nhập khẩu sys

Frompprintimportpprint pprint import pprint

pprint(sys.path)(sys.path)

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Ở đây, sys.path [0] là trên mạng/home/kalyani, vì đó là nơi đặt Main.py.

Bây giờ, hãy để sửa đổi tập lệnh một chút bằng cách sử dụng phương thức sys.Path.append (). Hãy để sử dụng phương pháp để nối một đường dẫn cụ thể (‘/home/kalyani/thư mục1,) vào sys.path.

sys.path.append (‘/home/kalyani/thư mục1,)

Hướng dẫn python sys path append relative path - đường dẫn sys python nối thêm đường dẫn tương đối

Vì vậy, phương thức sys.path.append () đã nối tiếp đường đến cuối danh sách hiện có! Ở đây, xin vui lòng lưu ý rằng việc nối tiếp được thực hiện ở cuối danh sách không ở đầu.