thêm thư mục vào sys.path / PYTHONPATH


130

Tôi đang cố gắng nhập một mô-đun từ một thư mục cụ thể.

Vấn đề là nếu tôi sử dụng sys.path.append(mod_directory)để nối đường dẫn và sau đó mở trình thông dịch python, thư mục mod_directorysẽ được thêm vào cuối danh sách sys.path. Nếu tôi xuất PYTHONPATHbiến trước khi mở trình thông dịch python, thư mục sẽ được thêm vào đầu danh sách. Trong trường hợp sau tôi có thể nhập mô-đun nhưng trong trường hợp trước, tôi không thể.

Ai đó có thể giải thích lý do tại sao điều này xảy ra và cho tôi một giải pháp để thêm mod_directoryvào đầu, bên trong một kịch bản python?


Tôi đã thử sitemô-đun .
Zeinab Abbasimazar

Câu trả lời:


178

Điều này đang làm việc như tài liệu. Bất kỳ đường dẫn nào được chỉ định trong PYTHONPATHđều được ghi lại như bình thường đến sau thư mục làm việc nhưng trước các đường dẫn do trình thông dịch chuẩn cung cấp. sys.path.append()nối vào đường dẫn hiện có Xem ở đâyở đây . Nếu bạn muốn có một thư mục cụ thể đến trước, chỉ cần chèn nó vào phần đầu của sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Điều đó nói rằng, thường có những cách tốt hơn để quản lý nhập khẩu hơn là sử dụng PYTHONPATHhoặc thao tác sys.pathtrực tiếp. Xem, ví dụ, câu trả lời cho câu hỏi này .


Cảm ơn vi đa trả lơi. Vấn đề là tôi đã không nhận ra rằng để thêm mô-đun được đóng gói dưới dạng tệp .egg, bạn phải bao gồm tên tệp thay vì chỉ thư mục trong python 2.6
UnadulteratedImagination

2
Này anh bạn, điều này đã phá vỡ django của tôi. Bạn có chắc là bạn muốn nói với mọi người để đặt nó lên hàng đầu không?!? !!?
R Claven

16
@RClaven, xin lỗi, thật khó để nói hành động và kết quả mà bạn đang đề cập đến là gì: "đặt nó lên hàng đầu" và "đã phá vỡ django của tôi" không chính xác lắm. Bạn có thể xây dựng?
Ned Deily

Để biết thêm về cách sys.path hoạt động, hãy xem câu trả lời này stackoverflow.com/a/38403654/850326
djhaskin987

2
Bạn thực sự nên sử dụng "1" thay vì "0"! Nếu không, bạn phá vỡ sys.path . Xem thêm stackoverflow.com/q/10095037/125507 .
kadee

9

Bạn đã có thể sử dụng:

import os
path = 'the path you want'
os.environ['PATH'] += ':'+path

bạn cần ';' trong cửa sổ.
sanjivgupta

6

Đối với tôi, tôi cần caffe đến con đường trăn của tôi. Tôi có thể thêm đường dẫn của tệp vào tệp /home/xy/.bashrcbằng cách thêm

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

vào /home/xy/.bashrctập tin của tôi

Nhưng khi tôi sử dụng pycharm, đường dẫn vẫn không vào.

Vì vậy, tôi có thể thêm đường dẫn đến PYTHONPATHbiến, bằng cách chạy -> chỉnh sửa Cấu hình.

nhập mô tả hình ảnh ở đây


Đơn giản nhất là câu trả lời tốt nhất, thêm câu này để phát triển sẽ làm cho công cụ tự động hoàn thành
Gang

Tôi đã cập nhật .bashrc như đã giải thích ở trên nhưng không phản ánh trong sổ ghi chép jupyter. Jupyter notebook vẫn nói không tìm thấy module.
Athar

3

Các thư mục thay đổi tạm thời hoạt động tốt để nhập:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Khi chạy tập lệnh Python từ Powershell trong Windows, điều này sẽ hoạt động:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.