2015-11-18 18 views
5

Nếu tôi xây dựng một gói với python setup.py bdist_wheel, gói kết quả sẽ mở rộng các shebang trong các kịch bản được liệt kê trong setup.py qua setup(scripts=["script/path"]) để sử dụng đường dẫn tuyệt đối đến trăn thực thi của tôi #!/home/f483/dev/storj/storjnode/env/bin/python.Làm thế nào để ngăn chặn bánh xe python mở rộng shebang?

Đây rõ ràng là sự cố khi bất kỳ ai sử dụng bánh xe sẽ không có thiết lập đó. Nó dường như không tạo ra sự khác biệt về loại shebang tôi đang sử dụng.

+0

Đây có thực sự là trong bánh xe không? Ý tôi là, bạn có thể thấy đường dẫn tuyệt đối của mình khi bạn giải nén nó không? Tôi hy vọng sự thay thế đường dẫn xảy ra chỉ sau khi cài đặt và sau đó nó chỉ phụ thuộc vào thiết lập virtualenv của bạn. – viraptor

+0

Có, đó là lý do tôi gặp lỗi trên máy khác. –

+0

Có vẻ như đây là lỗi trong bánh xe, có một vé mở tại đây: https://bitbucket.org/pypa/wheel/issues/135/bad-interpreter-lines-can-sneak-into – nnyby

Trả lời

2

Cuối cùng tôi đã thu hẹp và tìm ra sự cố.

Đây là các bước chính xác để tái tạo sự cố và giải pháp.

  1. Sử dụng mã thông báo hợp lệ trong tập lệnh được thêm vào setup.py. Trong trường hợp của tôi #!/usr/bin/env python

  2. Tạo virtualenv với virtualenv -p /usr/bin/python2 env và kích hoạt bằng source env/bin/activate.

  3. Cài đặt gói với python setup.py install vào virtualenv.

  4. Tạo bánh xe với python setup.py bdist_wheel.

Sự cố đang cài đặt gói cho virtualenv ở bước 3. Nếu điều này không được thực hiện thì shebang không được mở rộng.

+0

Tôi thấy sự cố này, ngay cả khi bỏ qua bước 3. – nnyby

0

Sử dụng tổng hợp shebang #!python dường như giải quyết được sự cố này.

Chỉnh sửa: Tính năng này được kết hợp!

+1

Nó cũng không chính xác. Nếu bạn chạy một tập tin với shbang '#! Python' nó sẽ chỉ cho bạn biết đó là một thông dịch viên xấu. – viraptor

+0

Các bước cài đặt tùy chọn trong spec bánh xe được cho là thay thế '#! Python' bằng một đường dẫn hợp lệ (https://www.python.org/dev/peps/pep-0427/#recommended-installer-features). Khi tôi đặt '#!python' ở trên cùng của kịch bản của tôi, bánh xe chính xác lá nó một mình khi chạy bdist_wheel. – nnyby

2

Điều này thường không xảy ra. Tôi cũng đề xuất:

  1. Nâng cấp pip/wheel/setuptools và kiểm tra xem đó có phải là lỗi hay không.

  2. Kiểm tra lại rằng shbang hiện tại là thứ gì đó chung chung trong tập lệnh. Ví dụ #!/usr/bin/env python

Dưới đây là một cách mà tôi không thể tái tạo vấn đề:

paster --no-interactive test 
mkdir test/scripts 
echo -e "#!/usr/bin/env python\nprint('test')" > test/scripts/s.py 
# add scripts/s.py to test/setup.py 
cd test; python setup.py bdist_wheel 

Nếu bạn giải nén bánh xe đó, s.py sẽ có một không hợp lệ/placeholder shbang #!python, nhưng trong quá trình cài đặt thực tế, nó sẽ được thay đổi thành đường dẫn hệ thống/virtualenv thích hợp.

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