Hướng dẫn where does python look for shared libraries? - python tìm thư viện chia sẻ ở đâu?

Tôi đang cố gắng nhập pycurl:

$ python -c "import pycurl"
Traceback [most recent call last]:
File "", line 1, in 
ImportError: libcurl.so.4: cannot open shared object file: No such file or directory

Bây giờ, libcurl.so.4 là trong /usr/local/lib. Như bạn có thể thấy, đây là trong sys.path:

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']

Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào.

BR123

3203 Huy hiệu bạc16 Huy hiệu Đồng3 silver badges16 bronze badges

hỏi ngày 8 tháng 7 năm 2009 lúc 19:06Jul 8, 2009 at 19:06

2

sys.path chỉ được tìm kiếm cho các mô -đun Python. Đối với các thư viện được liên kết động, các đường dẫn được tìm kiếm phải có trong

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
1. Kiểm tra xem
$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
1 của bạn có bao gồm /usr/local/lib không và nếu không, hãy thêm nó và thử lại.

Một số thông tin khác [nguồn]:

Trong Linux, biến môi trường LD_L Library_Path là một bộ thư mục được phân tách đại tràng, nơi các thư viện nên được tìm kiếm trước, trước bộ thư mục tiêu chuẩn; Điều này rất hữu ích khi gỡ lỗi một thư viện mới hoặc sử dụng thư viện không đạt tiêu chuẩn cho các mục đích đặc biệt. Biến môi trường LD_PRELOAD liệt kê các thư viện được chia sẻ với các chức năng ghi đè lên bộ tiêu chuẩn, giống như /etc/ld.so.preload không. Chúng được thực hiện bởi Trình tải /lib/ld-linux.so. Tôi nên lưu ý rằng, trong khi LD_L Library_Path hoạt động trên nhiều hệ thống giống như Unix, nó không hoạt động trên tất cả; Ví dụ, chức năng này có sẵn trên HP-UX nhưng là biến môi trường shlib_path và trên AIX, chức năng này là thông qua Libpath biến [với cùng một cú pháp, danh sách phân tách đại tràng].

CẬP NHẬT: Để đặt

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
1, hãy sử dụng một trong những điều sau đây, lý tưởng nhất trong tệp
$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
5 hoặc tương đương của bạn:
to set
$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
1, use one of the following, ideally in your
$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
5 or equivalent file:

export LD_LIBRARY_PATH=/usr/local/lib

hoặc

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Sử dụng biểu mẫu đầu tiên nếu nó trống [tương đương với chuỗi trống hoặc hoàn toàn không có] và biểu mẫu thứ hai nếu không. Lưu ý việc sử dụng xuất khẩu.

Đã trả lời ngày 8 tháng 7 năm 2009 lúc 19:12Jul 8, 2009 at 19:12

Vinay Sajipvinay SajipVinay Sajip

92.4K14 Huy hiệu vàng174 Huy hiệu bạc183 Huy hiệu đồng14 gold badges174 silver badges183 bronze badges

2

Đảm bảo mô -đun

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
6 của bạn nằm trong đường dẫn thư viện hệ thống, khác biệt và tách biệt với đường dẫn thư viện Python.

"Khắc phục nhanh" là thêm đường dẫn này vào biến

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
1. Tuy nhiên, việc thiết lập hệ thống đó rộng [hoặc thậm chí rộng rãi tài khoản] là một ý tưởng tồi, vì có thể đặt nó theo cách mà một số chương trình sẽ tìm thấy một thư viện mà nó không nên, hoặc thậm chí tệ hơn, mở ra các lỗ hổng bảo mật.

Nếu "thư viện được cài đặt cục bộ" của bạn được cài đặt, ví dụ, /usr/local/lib, hãy thêm thư mục này vào

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
9 [đó là tệp văn bản] và chạy
export LD_LIBRARY_PATH=/usr/local/lib
0

Lệnh sẽ chạy một tiện ích bộ đệm, nhưng cũng sẽ tạo tất cả các "liên kết tượng trưng" cần thiết cho hệ thống trình tải hoạt động. Điều đáng ngạc nhiên là

export LD_LIBRARY_PATH=/usr/local/lib
1 đối với Libcurl đã không làm điều này, nhưng có thể không thể nếu /usr/local/lib không có trong
$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
9 rồi.

Tái bút: Có thể là

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
9 của bạn không chứa gì ngoài
export LD_LIBRARY_PATH=/usr/local/lib
5. Bạn vẫn có thể thêm một đường dẫn thư mục sau nó hoặc chỉ tạo một tệp mới bên trong thư mục mà nó được đưa vào. Đừng quên chạy
export LD_LIBRARY_PATH=/usr/local/lib
0 sau nó.

Hãy cẩn thận. Nhận sai điều này có thể làm hỏng hệ thống của bạn.

Ngoài ra: Đảm bảo mô -đun Python của bạn được biên dịch theo phiên bản Libcurl đó. Nếu bạn vừa sao chép một số tệp từ một hệ thống khác, điều này sẽ luôn hoạt động. Nếu nghi ngờ, hãy biên dịch các mô -đun của bạn trên hệ thống bạn dự định sẽ chạy chúng.

Vitaly

2.5954 Huy hiệu vàng23 Huy hiệu bạc35 Huy hiệu Đồng4 gold badges23 silver badges35 bronze badges

Đã trả lời ngày 8 tháng 7 năm 2009 lúc 20:13Jul 8, 2009 at 20:13

Ch'marrCh'marrCh'marr

1.24411 Huy hiệu bạc8 Huy hiệu đồng11 silver badges8 bronze badges

2

Bạn cũng có thể đặt ld_run_path thành/usr/local/lib trong môi trường người dùng của bạn khi bạn biên dịch pycurl ngay từ đầu. Điều này sẽ nhúng/usr/local/lib trong thuộc tính RPATH của mô -đun mở rộng C. Vì vậy, nó tự động biết nơi tìm thư viện trong thời gian chạy mà không cần phải đặt LD_L Library_Path khi chạy.

Đã trả lời ngày 10 tháng 7 năm 2009 lúc 12:17Jul 10, 2009 at 12:17

Graham Dumpletongraham DumpletonGraham Dumpleton

56.8K6 Huy hiệu vàng113 Huy hiệu bạc131 Huy hiệu Đồng6 gold badges113 silver badges131 bronze badges

1

Có cùng một vấn đề. Tôi đã cài đặt Curl 7.19 đến/opt/curl/để đảm bảo rằng tôi sẽ không ảnh hưởng đến curl hiện tại trên các máy chủ sản xuất của chúng tôi. Khi tôi đã liên kết libcurl.so.4 đến /usr /lib:

sudo ln -s /opt/curl/lib/libcurl.so /usr/lib/libcurl.so.4

Tôi vẫn gặp lỗi tương tự! Durf.

Nhưng việc chạy ldconfig tạo ra mối liên kết cho tôi và điều đó đã hoạt động. Không cần đặt LD_RUN_PATH hoặc LD_L LIBRARY_PATH. Chỉ cần chạy LDConfig.

Đã trả lời ngày 5 tháng 3 năm 2010 lúc 2:18Mar 5, 2010 at 2:18

MattmattMatt

3473 Huy hiệu bạc8 Huy hiệu Đồng3 silver badges8 bronze badges

2

Là một bổ sung cho các câu trả lời trên - Tôi chỉ gặp phải một vấn đề tương tự và làm việc hoàn toàn với Python đã cài đặt mặc định.

Khi tôi gọi ví dụ về thư viện đối tượng được chia sẻ mà tôi đang tìm kiếm với

$ python -c "import sys; print[sys.path]"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']
1, tôi nhận được một cái gì đó như thế này:

$ LD_LIBRARY_PATH=/path/to/mysodir:$LD_LIBRARY_PATH python example-so-user.py
python: can't open file 'example-so-user.py': [Errno 2] No such file or directory

Đáng chú ý, nó thậm chí không phàn nàn về việc nhập - nó phàn nàn về tệp nguồn!

Nhưng nếu tôi buộc tải đối tượng bằng cách sử dụng

export LD_LIBRARY_PATH=/usr/local/lib
8:

$ LD_PRELOAD=/path/to/mysodir/mypyobj.so python example-so-user.py
python: error while loading shared libraries: libtiff.so.5: cannot open shared object file: No such file or directory

... Tôi ngay lập tức nhận được một thông báo lỗi có ý nghĩa hơn - về một sự phụ thuộc còn thiếu!

Chỉ nghĩ rằng tôi sẽ ghi lại điều này ở đây - chúc mừng!

Đã trả lời ngày 11 tháng 6 năm 2012 lúc 19:26Jun 11, 2012 at 19:26

SDAAUSDAAUsdaau

35,6K42 Huy hiệu vàng194 Huy hiệu bạc264 Huy hiệu đồng42 gold badges194 silver badges264 bronze badges

1

Tôi sử dụng

export LD_LIBRARY_PATH=/usr/local/lib
9 và tệp .so được biên dịch nằm trong thư mục xây dựng. Bạn có thể nhập
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
0 để xem các giải thích của -r và -i

Đã trả lời ngày 22 tháng 4 năm 2016 lúc 10:16Apr 22, 2016 at 10:16

ScutterkeyscutterkeyScutterKey

572 Huy hiệu bạc8 Huy hiệu Đồng2 silver badges8 bronze badges

Đối với tôi những gì hoạt động ở đây là sử dụng trình quản lý phiên bản như PyenV, mà tôi khuyên bạn nên có được môi trường dự án và phiên bản gói được quản lý tốt và tách biệt với hệ thống hoạt động.

Tôi đã có lỗi tương tự sau khi cập nhật hệ điều hành, nhưng dễ dàng sửa bằng

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
1 [phiên bản tôi sử dụng].

Đã trả lời ngày 21 tháng 4 năm 2020 lúc 10:04Apr 21, 2020 at 10:04

elcorganoelcorganoelcortegano

2.19510 Huy hiệu vàng38 Huy hiệu bạc53 Huy hiệu Đồng10 gold badges38 silver badges53 bronze badges

Python tìm thư viện ở đâu?

Python tìm kiếm các mô -đun trong Sys Sys.Nó tìm kiếm một tệp được gọi là a_module.py trong các thư mục được liệt kê trong sys biến.đường dẫn .sys. It looks for a file called a_module.py in the directories listed in the variable sys. path .

Thư viện chia sẻ đi đâu?

Khi bạn đã tạo một thư viện được chia sẻ, bạn sẽ muốn cài đặt nó.Cách tiếp cận đơn giản chỉ đơn giản là sao chép thư viện vào một trong các thư mục tiêu chuẩn [ví dụ: /usr /lib] và chạy ldconfig [8].Cuối cùng, khi bạn biên dịch các chương trình của mình, bạn sẽ cần nói với trình liên kết về bất kỳ thư viện tĩnh và chia sẻ nào mà bạn đang sử dụng./usr/lib] and run ldconfig[8]. Finally, when you compile your programs, you'll need to tell the linker about any static and shared libraries that you're using.

Làm thế nào để Python tìm thấy các gói?

Python nhập khẩu công việc bằng cách tìm kiếm các thư mục được liệt kê trong sys.path.Vì vậy, Python sẽ tìm thấy bất kỳ gói nào đã được cài đặt cho các vị trí đó. path . So Python will find any packages that have been installed to those locations.

Bài Viết Liên Quan

Chủ Đề