2011-01-29 24 views
37

Tôi không thể tìm ra cách làm cho setup.py thêm một đoạn mã vào /bin hoặc /usr/bin hoặc bất kỳ thứ gì của người dùng.setup.py và thêm tệp vào/bin/

Ví dụ: tôi muốn thêm myscript.py vào /usr/bin để người dùng có thể gọi myscript.py từ bất kỳ thư mục nào.

+0

Hãy thử [ví dụ này] (https://chriswarrick.com/blog/2014/09/15/python-apps-the-right-way-entry_points-and-scripts/). Theo mặc định, 'python setup.py install' sẽ cài đặt my_project vào'/usr/local/bin'. Để xóa cài đặt, hãy chạy 'python setup.py install --record files.txt', tạo tệp.txt, và sau đó xóa các đường dẫn đó bằng 'rm' – anonymous

Trả lời

16

Tài liệu Python giải thích nó dưới phần installing scripts.

Tập lệnh là các tệp chứa mã nguồn Python, dự định được bắt đầu từ dòng lệnh.

+0

Điều đó dường như đặt các tệp vào thư mục' bin' của Python (trên máy Mac của tôi '/ opt/local/Library/Frameworks/Python.framework/Phiên bản/3.1/bin /') nhưng tôi vẫn không thể chạy chúng. –

+2

aharon, tùy thuộc vào cách bạn cài đặt 3.1, bạn có thể phải thay đổi 'PATH' của bạn để các tập lệnh trong thư mục bin của nó hoạt động đúng. Xem [câu trả lời này] (http://stackoverflow.com/questions/3487664/getting-python-under-control-on-os-x-setting-up-environment-and-libraries/3489922#3489922) cho câu hỏi trước để được hướng dẫn làm như vậy. – Andrew

10

Nếu bạn sẵn sàng để xây dựng và cài đặt toàn bộ gói python, đây là cách tôi sẽ đi về nó:

  • Chỉnh sửa các thiết lập() chức năng trong setup.py để chứa một tham số có tên tập lệnh và đặt đối số của nó làm vị trí của (các) tệp mà bạn muốn chạy từ bất kỳ đâu. ví dụ.

setup(name='myproject',author='',author_email='',scripts=['bin/myscript.py'])

  • Trong thư mục chứa setup.py, tạo một thư mục bin bằng cách gõ mkdir bin
  • Thêm myscript.py để vừa tạo bin thư mục này (và chắc chắn rằng nó thực thi!)
  • cd vào thư mục chứa setup.py lần nữa và cài đặt toàn bộ gói python bằng cách nhập python setup.py install
  • Khi gói đã được cài đặt, bạn sẽ có thể chạy myscript.py từ bất cứ đâu trên hệ thống!
+0

nếu tôi muốn bỏ qua phần mở rộng py? Btw, thực hành thêm mã nguồn trong thư mục bin có phần nghi ngờ – DataGreed

+0

@DataGreed Nếu bạn muốn bỏ qua phần mở rộng .py ... bỏ qua nó :) miễn là tệp có thể thực thi được, phần mở rộng có thể được bỏ qua và bạn có thể đơn giản chạy 'myscript' từ dòng lệnh. Hãy tha thứ cho sự ngây thơ của tôi, nhưng tại sao lại thêm mã nguồn vào thư mục bin có vấn đề? – wh1tney

+0

Đó là một quyết định rất kỳ lạ. Bin nên chứa các bản dựng chứ không phải nguồn. – DataGreed

40

Xem xét sử dụng console_scripts:

from setuptools import setup 
setup(name='some-name', 
     ... 
     entry_points = { 
       'console_scripts': [ 
        'command-name = package.module:main_func_name',     
       ],    
      }, 
) 

đâu main_func_name là một chức năng chính trong mô-đun chính của bạn. lệnh-name là một tên theo đó nó sẽ được lưu trong/usr/local/bin/(thường)

+0

Nếu bạn đang chạy 'pip3 install --editable .' nó sẽ cài đặt vào lệnh tới'/home/{username} /. Local/bin'. Nếu bạn chạy 'sudo pip3 install --editable .', nó sẽ cài đặt lệnh vào'/usr/local/bin/' – sonance207

9

Có hai cách để có được một công cụ dòng lệnh làm việc kể từ setuptools và cơ sở hạ tầng PyPI:

  1. The "scripts" Keyword Argument
    Điều này cho phép thực hiện dòng lệnh mọi thứ bạn muốn, nó có thể là một tập lệnh Python, một kịch bản lệnh shell hoặc một thứ hoàn toàn khác.
  2. The "console_scripts" Entry Point
    Điều này cho phép chức năng Python (không phải tập lệnh!) Được đăng ký trực tiếp dưới dạng công cụ có thể truy cập bằng dòng lệnh.
+0

Phương pháp đầu tiên sẽ đặt các kịch bản có khả năng có phần mở rộng" .py "vào thư mục bin AND (Tôi nghĩ) không được điều chỉnh cho virtualenvs. XẤU XÍ. Tốt nhất để sử dụng console_scripts. –

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