Tôi đang phát triển một bot slack với các plugin sử dụng các điểm vào. Tôi muốn tự động thêm plugin trong thời gian chạy.Cách tự động thêm và tải điểm vào?
Tôi có một dự án với cấu trúc này:
+ ~/my_project_dir/
+ my_projects_python_code/
+ plugins/
- plugin1.py
- plugin2.py
- ...
- pluginN.py
- setup.py
- venv/
- install.sh
tập tin setup.py
của tôi trông như thế này:
from setuptools import setup, find_packages
setup(
name="My_Project_plugins",
version="1.0",
packages=['plugins'],
entry_points="""
[my_project.plugins]
plugin1 = plugins.plugin1:plugin1_class
plugin2 = plugins.plugin2:plugin2_class
...
pluginN = plugins.pluginN:pluginN_class
"""
)
Chạy sudo install.sh
nào sau đây:
Sao chép tập tin cần thiết đến
/usr/share/my_project_dir/
Kích hoạt virtualenv tại
/usr/share/my_project_dir/venv/bin/activate
Run:
python setup.py develop
này hoạt động như mong đợi và thiết lập các điểm vào tôi một cách chính xác để tôi có thể sử dụng chúng thông qua các bot.
Nhưng tôi muốn có thể thêm plugin vào setup.py
và có thể sử dụng plugin trong khi bot đang chạy. Vì vậy, tôi muốn thêm một dòng: pluginN+1 = plugins.pluginN+1:pluginN+1_class
và có pluginN + 1 có sẵn để sử dụng.
Những gì tôi đã cố gắng/học:
Sau
/usr/share/my_project_dir/venv/bin/activate
tôi mở một shell tương tác Python và lặp quapkg_resources.iter_entry_points()
, trong đó liệt kê tất cả những gì đã được nạp từ trạng thái ban đầu của setup.py (tức plugin1 qua pluginN)Nếu tôi thêm một dòng vào
setup.py
và chạysudo python setup.py develop
và lặp lại với cùng một vỏ Python, nó không nhận plugin mới nhưng nếu tôi thoát vỏ và mở lại, plugin mới được chọn lên.tôi nhận thấy rằng khi tôi cài đặt bot, một phần của đầu ra nói:
Copying My_Project_plugins-1.0-py2.7.egg to /usr/share/my_project-dir/venv/lib/python2.7/site-packages
Khi tôi
cd /usr/share/my_project_dir/
, kích hoạt virtualenv của tôi, và chạysetup.py
từ vỏ nó nói :Creating /usr/local/lib/python2.7/dist-packages/My_Project-plugins.egg-link (link to .) My_Project-plugins 1.0 is already the active version in easy-install.pth
Nếu bạn có nhiều plugin cho một chương trình phổ biến, hãy thực hiện một số thao tác như 'pip install',' pip uninstall', 'pip search' là lựa chọn không mong muốn? –
Mục đích là để có các plugin cài đặt bot trong thời gian chạy thông qua một thông báo slack. Vì vậy, nó sẽ cần phải được cập nhật tự động và mỗi plugin này sẽ là độc quyền. –
Bạn có thể mô tả chi tiết hơn về cách hoạt động của nó? 1. Bot nhận lệnh để cài đặt một số plugin? "Cài đặt" là gì? Nếu bot tải xuống hoặc sao chép tệp này từ một số địa điểm thì sao? Hoặc nó chỉ cần gọi một số chức năng từ tập tin đã có? 2. Bot gọi một hàm hoặc nó phải khởi chạy một tập lệnh? Làm sao? –