2013-04-19 103 views
68

Tôi đang cố gắng nhập một mô-đun từ một thư mục cụ thể.thêm thư mục vào sys.path/PYTHONPATH

Vấn đề là nếu tôi sử dụng sys.path.append(mod_directory) để nối thêm đường dẫn và sau đó mở trình thông dịch python, thư mục mod_directory sẽ được thêm vào cuối danh sách sys.path. Nếu tôi xuất biến số PYTHONPATH 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à đưa cho tôi một giải pháp để thêm mod_directory khi bắt đầu, bên một kịch bản python?

+0

Tôi đã thử [module 'site] (https://docs.python.org/3/library/site.html#site.addsitedir). –

Trả lời

95

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

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

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

+0

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

+1

Hey người đàn ông, điều này đã phá vỡ django của tôi. Bạn có chắc chắn muốn nói với mọi người để đặt nó ở đầu?!? !!? –

+12

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

1

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

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

thay đổi Tạm thời dirs hoạt động tốt cho việc nhập:

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

Khi chạy một kịch bản Python từ Powershell trong môi trường Windows, điều này sẽ làm việc:

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

# Now run the actual script 
python your_script.py