2017-02-11 17 views
12

Tôi đang cố tạo một gói của riêng mình. Gói này rất đơn giản, nó có một mô-đun python và một tập lệnh bash. Tôi wan cả hai người trong số họ sẽ được cài đặt theo /usr/local/bin để họ có thể được thực hiện trực tiếp.pip không cài đặt entry_points dưới dạng tệp thực thi

Dưới đây là setup.py tập tin của tôi:

from setuptools import setup 

setup(
    name='deploy', 
    . 
    . 
    . 
    install_requires=['pyyaml', 'cot', 'jsonschema'], 
    entry_points={ 
     'console_scripts': [ 
      'cloud_config = cloud_config:main', 
     ], 
    }, 
    scripts=['deploy.sh'], 
) 

Dưới đây là đoạn trích từ đầu ra của pip install ...:

running install_scripts 
    copying build/scripts-2.7/deploy.sh -> /usr/local/lib/python2.7.10/bin 
    changing mode of /usr/local/lib/python2.7.10/bin/deploy.sh to 755 
    Installing cloud_config script to /usr/local/lib/python2.7.10/bin 

Với điều này, tôi không thể để gọi một trong hai python hoặc kịch bản bash trực tiếp.

Bất kỳ ý tưởng nào?

Chỉnh sửa: Tôi đang chạy máy pip trên máy Ubuntu 16.04.1. Chỉ cần cố gắng cài đặt cùng một gói trên máy Ubuntu 14.04 và hành vi như mong đợi. cloud_config.pydeploy.sh cả hai được cài đặt vào /usr/local/bin và tôi có thể gọi cả từ bất kỳ đâu trên hệ thống.

+2

Ubuntu vá lỗi nhiều pip; Tôi không ngạc nhiên khi họ thay đổi hành vi ở đây. –

+0

Đó là ngớ ngẩn @MartijnPieters. Làm cách nào để tạo một gói cài đặt đúng trên tất cả các nền tảng? – ronakg

+0

Tôi vừa cố gắng tạo một gói dựa trên 'setup.py' của bạn và triển khai để làm sạch hộp thư Ubuntu 16.04 Vagrant - tất cả đều hoạt động tốt.Nếu bạn cung cấp thêm thông tin, nó có thể giúp tái tạo vấn đề. Có lẽ một cái gì đó với các phiên bản? Bạn sử dụng phiên bản setuptools nào để lắp ráp? Đó là pip và setuptools trên máy mục tiêu? – Timur

Trả lời

1

Cuối cùng tôi làm cho nó hoạt động. Tôi đã phải gỡ bỏ gói pip đã được cài đặt bởi apt.

sudo apt remove python-pip 

Và sau đó cài đặt lại pip theo hướng dẫn trên trang web của họ - https://pip.pypa.io/en/stable/installing/.

wget https://bootstrap.pypa.io/get-pip.py 
sudo python get-pip.py 

Có vẻ như pip từ kho lưu trữ mặc định của Ubuntu không giống với pip được phân phối bởi pypi.

0

Hãy thử:

pip install --install-option="--prefix=$PREFIX_PATH" package_name 

ví dụ

pip install --install-option="--prefix=/usr/local/bin" pyFooBar 
+0

Không phải các mục nhập trong 'entry_points -> console_scripts' được cài đặt trong' PATH' để chúng có thể gọi từ bất kỳ đâu? – ronakg

+0

Theo tài liệu này để đóng gói python - http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html – ronakg

2

Hai tùy chọn tôi có thể nghĩ, trước tiên, hãy kiểm tra xem pip đó có trỏ đúng không. Vì vậy hãy thử:

which python 

tôi nói:

/usr/bin/python 

của bạn sẽ khác nhau, thay đổi đường dẫn phù hợp để thì chắc chắn rằng các PATH được thiết lập đúng cách, vì vậy:

export PATH=/usr/bin/python:${PATH} 

Cài đặt lại pip và thử lại. Không đó, một cách giải quyết có thể không sử dụng pip trong trường hợp này và cố gắng:

python setup.py install 

mà sẽ sử dụng con đường python mặc định của bạn (không PIP) và nên cài đặt vào:

/usr/local/bin 
+0

Mine cũng nói '/ usr/bin/python'. Xem câu trả lời của tôi dưới đây để xem những gì làm việc. Tôi vẫn không có ý tưởng tại sao pip mặc định không hoạt động. – ronakg

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