Biến môi trường PYTHONPATH


19

Tôi có cái này trong ~/.profile:

export PYTHONPATH=/home/dev/python-files

Trong python-filesthư mục, tôi có một vài dự án được nhân bản từ git-hub (Vase, curveship và py-vgdl).

Bất cứ khi nào tôi cố gắng khởi động bất kỳ ví dụ nào trong các dự án này, tôi đều gặp lỗi tương tự như sau:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

Dường như với tôi rằng tôi không nên gặp lỗi này vì tôi đã PYTHONPATHthiết lập biến môi trường đó ?

Chạy trình thông dịch tương tác python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'

Câu trả lời:


35

Hãy thử thêm vào PYTHONPATH thay vì ghi đè hoàn toàn.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Tài liệu tham khảo:

Theo tài liệu Python về PYTHONPATH

Tăng cường đường dẫn tìm kiếm mặc định cho các tập tin mô-đun. [...]

Đường dẫn tìm kiếm mặc định phụ thuộc vào cài đặt, nhưng thường bắt đầu bằng prefix/lib/pythonversion(xem PYTHONHOMEbên trên). Nó luôn luôn được thêm vào PYTHONPATH.

có nghĩa là một số giá trị tồn tại PYTHONPATHvà đường dẫn tìm kiếm mặc định cũng chỉ được nối thêm.

Ngoài ra, bài đăng trên blog này ( liên kết Archive.org ) cũng giải thích rõ ràng lý do tại sao bạn cần phải thêm vào PYTHONPATHvà không ghi đè lên nó. Cuộn xuống phần - Các trường hợp đặc biệt và kiểm tra đường dẫn tìm kiếm giải thích rõ ràng (rất tiếc không có URL liên quan đến liên kết đó nên bạn sẽ phải cuộn). Mặc dù người dùng đưa ra các ví dụ trên máy Mac nhưng chúng rất phù hợp với bất kỳ nền tảng nào


1
@Garrett Cảm ơn :) Cập nhật với liên kết Archive.org.
Nitin Venkatesh

+1 cho liên kết lưu trữ / stereoplex. Nó trả lời rất nhiều câu hỏi nên có trên trang nhất của tài liệu Python chính thức!
Malik A. Rumi

5

Bạn cũng có thể làm như sau:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd là thư mục làm việc hiện tại.


Coi chừng, điều này sẽ ghi đè lên PYTHONPATH của bạn trong quá trình này! Nếu bạn muốn thêm pwd vào PYTHONPATH của mình:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111

4

PYTHONPATHphải chỉ ra nơi các gói và mô-đun Python của bạn chứ không phải nơi thanh toán của bạn. Nói cách khác, nếu bạn làm một ls "$PYTHONPATH"bạn sẽ thấy *.pycác tệp ( mô-đun Python ) và các thư mục chứa __init__.pytệp ( gói Python ).

Vì vậy, nếu bạn muốn có thể import vgdl, bạn PYTHONPATHnên trông như thế này:

PYTHONPATH=/home/dev/python-files/py-vgdl

bởi vì vgdl gói là bên trong py-vgdl, không phải bên trong python-files.

Để thêm các đường dẫn khác, bạn có thể sử dụng :để tách chúng:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

Điều này thực sự sẽ làm việc, tuy nhiên, đối với những trường hợp như vậy, việc sử dụng PYTHONPATHcó thể quá phức tạp. Những gì tôi khuyên là nên sử dụng virtualenv, được thực hiện nhằm mục đích đơn giản hóa các tình huống như của bạn. Những gì bạn phải làm về cơ bản là:

  1. Tạo một môi trường: virtualenv env
  2. 'Kích hoạt' nó: source env/bin/activate
  3. Cài đặt các gói của bạn: điều này có thể được thực hiện bằng cách sử dụng piphoặc setup.pytập lệnh của các gói của bạn.
  4. Thưởng thức.

Tôi không cung cấp nhiều thông tin vì virtualenv được ghi chép đầy đủ và nếu bạn cần trợ giúp về vấn đề gì đó, tốt hơn hết bạn nên mở một câu hỏi mới.

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.