2011-01-02 29 views
57

Tôi muốn chạy:Python - thêm PYTHONPATH trong dòng lệnh mô-đun chạy

python somescript.py somecommand 

Tuy nhiên, khi tôi chạy này, tôi cần PYTHONPATH để bao gồm một thư mục nhất định. Tôi không thể chỉ thêm nó vào các biến môi trường của tôi vì thư mục tôi muốn thêm các thay đổi dựa trên dự án tôi đang chạy. Có cách nào thay đổi PYTHONPATH trong khi chạy tập lệnh không? Lưu ý: Tôi thậm chí không có biến số PYTHONPATH, vì vậy tôi không cần phải lo lắng về việc phụ thêm vào nó và ghi đè nó trong khi chạy tập lệnh này.

Trả lời

91

Dành cho Mac/Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand 

Đối với Windows, thiết lập trình bao bọc pythonpath.bat;

@ECHO OFF 
setlocal 
set PYTHONPATH=%1 
python %2 %3 
endlocal 

và gọi pythonpath.bat tập lệnh như;

pythonpath.bat /foo/bar/baz somescript.py somecommand 
+0

@ İsmail - nhờ. Tuy nhiên, làm thế nào tôi có thể làm điều đó trong khi chạy một kịch bản từ dấu nhắc lệnh của tôi? Tôi không chạy Python, nhập nội dung và chạy thủ công. – orokusaki

+0

Trên Mac/Linux, bạn sẽ thực hiện 'PYTHONPATH =/foo/bar python somescript.py somecommand' – ismail

+0

Tôi đã thử' python -c "sys nhập khẩu; sys.path.append ('/ my/dir')" 'và sau đó' python myscript.py mycommand', nhưng rõ ràng là không chia sẻ đường dẫn từ phiên phiên dịch đầu tiên với phiên kế tiếp. Ah, chỉ nhìn thấy bình luận tiếp theo của bạn, cố gắng ngay bây giờ ... Đã không làm việc trên WinXP. – orokusaki

38
import sys 
sys.path.append('your certain directory') 

Về cơ bản sys.path là một danh sách tất cả các đường dẫn tìm kiếm các module python. Nó được khởi tạo bởi người phiên dịch. Nội dung của PYTHONPATH được tự động thêm vào cuối danh sách đó.

+8

hoặc sys.path.insert (0, '/ some/directory') để đặt nó ở phía trước đường dẫn của bạn. Điều này cho phép tài liệu của bạn ghi đè lên các nội dung khác có thể đã có trên pythonpath. – sienkiew

+0

Tôi đã sử dụng câu trả lời này để chạy uninttest bên ngoài pydev-eclipse IDE. – LAL

+0

'sys.path.append (r'D: \ PyCharmProjects \ cheese_shoppe ')' ví dụ trong Windows. –

6

Nếu bạn đang chạy các lệnh từ một vỏ POSIX-compliant, như bash, bạn có thể thiết lập các biến môi trường như thế này:

PYTHONPATH="/path/to" python somescript.py somecommand 

Nếu đó là tất cả trên cùng một dòng, giá trị môi trường PYTHONPATH chỉ áp dụng cho một lệnh.

$ echo $PYTHONPATH 

$ python -c 'import sys;print("/tmp/pydir" in sys.path)' 
False 
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)' 
True 
$ echo $PYTHONPATH 
+0

Chỉ là những gì tôi đang tìm kiếm, cảm ơn rất nhiều. Đối với một số lý do chạy 'python -c" import sys; sys.path.insert (0, 'my/path'); nhập mymodule "' không hoạt động. –

-1

này là dành cho các cửa sổ:

Ví dụ, tôi có một thư mục có tên "mygrapher" trên máy tính để bàn của tôi. Bên trong, có các thư mục được gọi là "tính toán" và "vẽ đồ thị" chứa các tệp Python mà tệp chính của tôi "grapherMain.py" cần. Ngoài ra, "grapherMain.py" được lưu trữ trong "vẽ đồ thị". Để chạy mọi thứ mà không cần di chuyển tệp, tôi có thể tạo tập lệnh theo lô. Hãy gọi tập tin batch này là "rungraph.bat".

@ECHO OFF 
setlocal 
set PYTHONPATH=%cd%\grapher;%cd%\calculation 
python %cd%\grapher\grapherMain.py 
endlocal 

Tập lệnh này nằm trong "người theo dõi". Để chạy điều gì đó, tôi sẽ nhận được vào cửa sổ lệnh của tôi, sau đó làm:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder) 
>rungraph.bat (this executes the batch file) 
+3

và điều này khác với câu trả lời Dönmez của @ İsmail 'cartman như thế nào? –

0

Bạn có thể thử này để thực hiện một chức năng bên trong kịch bản của bạn

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()" 
Các vấn đề liên quan