2013-10-24 16 views
13

vì vậy tôi tìm thấy this answer tới đúng câu hỏi của tôi, nhưng vì một lý do nó không làm việc:Pip không nhặt một tùy chỉnh cài đặt cmdclass

$ cat /tmp/testinstall/setup.py:

from setuptools.command.install import install 

from setuptools import setup 


class verifying_install(install): 
    def run(self): 
     print "running........" 
     install.run(self) 
     print "verifying........" 


setup(name='test', 
     version='1', 
     py_modules=['test'], 
     include_package_data=True, 
     zip_safe=True, 
     cmdclass={'install': verifying_install} 
) 

Nhưng sau đó, mặc dù setup.py install công trình: :

➜ /tmp/testinstall 
$ mktmpenv && cd - 
This is a temporary environment. It will be deleted when you run 'deactivate'. 

(5bc7db7ca1b34ec5)➜ /tmp/testinstall 
$ python setup.py install 
running install 
running........ 
running build 
running build_py 
creating build 
creating build/lib.linux-x86_64-2.7 
copying test.py -> build/lib.linux-x86_64-2.7 
running egg_info 
creating test.egg-info 
writing test.egg-info/PKG-INFO 
writing top-level names to test.egg-info/top_level.txt 
writing dependency_links to test.egg-info/dependency_links.txt 
writing manifest file 'test.egg-info/SOURCES.txt' 
reading manifest file 'test.egg-info/SOURCES.txt' 
writing manifest file 'test.egg-info/SOURCES.txt' 
running install_lib 
copying build/lib.linux-x86_64-2.7/test.py -> /home/bwm/.virtualenvs/5bc7db7ca1b34ec5/lib/python2.7/site-packages 
byte-compiling /home/bwm/.virtualenvs/5bc7db7ca1b34ec5/lib/python2.7/site-packages/test.py to test.pyc 
running install_egg_info 
Copying test.egg-info to /home/bwm/.virtualenvs/5bc7db7ca1b34ec5/lib/python2.7/site-packages/test-1-py2.7.egg-info 
running install_scripts 
verifying........ 

(Lưu ý running...verifying...... dòng)

pip install của thư mục không hoạt động:

(5bc7db7ca1b34ec5)➜ /tmp/testinstall 
$ deactivate && mktmpenv && cd - && pip install . 
Removing temporary environment: 5bc7db7ca1b34ec5 
Removing 5bc7db7ca1b34ec5... 
New python executable in 4cac61c13d080257/bin/python 
Installing Setuptools...done. 
Installing Pip....done. 
This is a temporary environment. It will be deleted when you run 'deactivate'. 
/tmp/testinstall 
Unpacking /tmp/testinstall 
    Running setup.py egg_info for package from file:///tmp/testinstall 

Cleaning up... 

và PIP cài đặt của sdist không hoạt động hoặc:

(4cac61c13d080257)➜ /tmp/testinstall 
$ python setup.py sdist 
running sdist 
# ..snip.. 
creating dist 
Creating tar archive 
removing 'test-1' (and everything under it) 
(4cac61c13d080257)➜ /tmp/testinstall 
$ deactivate && mktmpenv && cd - 
Removing temporary environment: 4cac61c13d080257 
Removing 4cac61c13d080257... 
New python executable in 9a42f3a58809f1a3/bin/python 
Installing Setuptools...done. 
Installing Pip...done. 
This is a temporary environment. It will be deleted when you run 'deactivate'. 
/tmp/testinstall 

(9a42f3a58809f1a3)➜ /tmp/testinstall 
$ ls dist 
test-1.tar.gz 
(9a42f3a58809f1a3)➜ /tmp/testinstall 
$ pip install dist/test-1.tar.gz 
Unpacking ./dist/test-1.tar.gz 
    Running setup.py egg_info for package from file:///tmp/testinstall/dist/test-1.tar.gz 

Cleaning up... 

Note thiếu running...verifying... từ trong cả hai những, cái đó.

Bất kỳ ai có ý tưởng gì đang xảy ra ở đây?

Trả lời

0

Hãy thử:

pip install dist/test-1.tar.gz -U 
6

Tôi chạy vào cùng một vấn đề. Hãy thử chạy pip install -vvv <path> - có thể là các thư đang bị ẩn bằng cách nào đó (tôi không biết tại sao - không phải chuyên gia về pip!). Trong mọi trường hợp, bạn có thể xác nhận rằng mã đang được chạy bằng cách in mã tùy chỉnh của bạn vào một tệp ở đâu đó thay vì STDOUT.

4

Tôi đã gặp sự cố này ngay bây giờ. Có vẻ như có nhiều lệnh khác nhau mà pip install my-package có thể dịch sang.

  1. setup.py install
  2. setup.py egg_info
  3. setup.py develop

Vì vậy, bạn cần phải xử lý từng trường hợp khác nhau.

from setuptools.command.install import install 
from setuptools.command.develop import develop 
from setuptools.command.egg_info import egg_info 

''' 
BEGIN CUSTOM INSTALL COMMANDS 
These classes are used to hook into setup.py's install process. Depending on the context: 
$ pip install my-package 

Can yield `setup.py install`, `setup.py egg_info`, or `setup.py develop` 
''' 


def custom_command(): 
    import sys 
    if sys.platform in ['darwin', 'linux']: 
     os.system('./custom_command.sh') 


class CustomInstallCommand(install): 
    def run(self): 
     install.run(self) 
     custom_command() 


class CustomDevelopCommand(develop): 
    def run(self): 
     develop.run(self) 
     custom_command() 


class CustomEggInfoCommand(egg_info): 
    def run(self): 
     egg_info.run(self) 
     custom_command() 

''' 
END CUSTOM INSTALL COMMANDS 
''' 

setup(
    ... 
    cmdclass={ 
     'install': CustomInstallCommand, 
     'develop': CustomDevelopCommand, 
     'egg_info': CustomEggInfoCommand, 
    }, 
    ... 
) 
+1

Tôi đã thử điều này, nhưng nó không hoạt động khi cố gắng cài đặt gói sdist từ pypi. Xem thảo luận liên quan https://chat.stackoverflow.com/rooms/150536/discussion-between-swiftsnamesake-and-collins-a. Chỉ cài đặt và cài đặt cục bộ trực tiếp từ kho git mới hoạt động. – salomonvh

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