2014-08-27 15 views
6

tôi muốn làm việc với kho lanh lợi của hg riêng của mình. Đó là, tôi nhân bản Mercurial từ https://www.mercurial-scm.org/repo/hg và muốn chạy một số lệnh hg bên trong kho lưu trữ nhân bản. Vấn đề là khi chạy hg bên trong bản sao này hg thực thi cố gắng tải các mô-đun python của nó từ thư mục này chứ không phải từ /usr/lib/pythonVERSION v.v. Vì tôi hiểu điều này xảy ra vì đường dẫn nhập mã sys.path chứa chuỗi rỗng có thể có nghĩa là "hiện tại danh mục". PYTHONPATH biến môi trường chưa được đặt.Làm thế nào để loại bỏ thư mục hiện hành từ đường nhập khẩu python

Các questtion là làm thế nào tôi có thể ngăn cản tôi cài đặt hg từ nhập khẩu các module "sai".

+0

'sys.path.insert (0,"/usr/lib/pythonVERSION ")'? –

+0

Tôi nên đặt nó ở đâu? Tôi không muốn sửa đổi kịch bản hệ thống 'hg'. – ragol

Trả lời

0

@ragol, tôi nghĩ rằng Padraic có giải pháp đúng. Trong tập lệnh python mà bạn đang cố gắng chạy lệnh hg, bạn cần phải bao gồm lệnh sau: sys.path.insert(0,"/usr/lib/pythonVERSION")

Đặt lệnh ở đầu của tập lệnh python. Lệnh này yêu cầu python tìm trong thư mục /usr/lib/pythonVERSION trước khi nhập các mô-đun.

Nếu điều đó không làm việc, bạn có thể cần phải được cụ thể hơn với con đường. Ví dụ, nếu các module bạn đang cố gắng để nhập khẩu nằm trong thư mục /usr/lib/pythonVERSION/site-packages/hg, bạn có thể sử dụng lệnh sau: sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")

+1

Kịch bản mà tôi cố gắng chạy là '/ usr/bin/hg', bản thân nó là chính nó. Có thể tôi không hiểu bạn một cách chính xác, nhưng có vẻ như bạn đề nghị sửa đổi nó. Đó là tất nhiên giải pháp đơn giản nhất, nhưng nó có nghĩa là tôi sẽ sửa đổi một tập tin được cài đặt bởi trình quản lý gói. Tôi không thích ý tưởng này. Tôi muốn viết một kịch bản bên ngoài gọi '/ usr/bin/hg' theo cách mà nó không tải các mô-đun từ thư mục hiện hành. – ragol

+0

tên của tập lệnh bạn đang chạy là gì? nó có phần mở rộng .py? im giả sử rằng bạn đã tạo hoặc chỉnh sửa một số tập lệnh python và đang cố gắng nhập một mô-đun được gọi là mercurial. những gì tôi đề nghị là bao gồm các lệnh sys.path.insert trước khi dòng nơi bạn cố gắng nhập khẩu các mô-đun thủy ngân – rolb

+1

@rolb bao nhiêu lần anh ta phải nói với bạn? Anh ta đang chạy '/ usr/bin/hg', như là một tệp thực thi. Nó có thể là một thực thi thực tế, nó có thể là một kịch bản với một shebang. Nó không có bất kỳ phần mở rộng nào, chúng không được yêu cầu trong UNIX. –

1

Con đường tôi sẽ đối phó với chủ đề là bằng cách tạo ra một kịch bản /usr/local/bin/hg sh với các nội dung sau:

#!/bin/sh 
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg 

(distributives dựa trên Ubuntu sử dụng dist-packages thay vì site-packages)

PYTHONPATH là một biến môi trường đặc biệt tôn trọng bởi Python thông dịch viên để có thêm đường dẫn mô-đun nhập khẩu.

Ngoài ra, bạn có thể xuất PYTHONPATH vào shell của bạn, nhưng nó sẽ ảnh hưởng đến toàn bộ kinh nghiệm của bạn.

Các vấn đề liên quan