Python: pip устанавливает подпакеты в корневом каталоге - PullRequest
4 голосов
/ 09 ноября 2010

У меня есть такая структура:

setup.py
package
    __init__.py
    sub_package
        ___init__.py
    sub_package2
        __init__.py

Если я устанавливаю пакет с помощью setup.py install, то он работает как следует (копируя весь пакет в каталог site-packages):

site_packages
    package
        sub_package
        sub_package2

Но если я запускаю pip install package, то pip устанавливает каждый подпакет как независимый пакет:

site-packages
    package
    sub_package
    sub_package2

Как этого избежать?Я использую find_packages () из setuptools для указания пакетов.

1 Ответ

7 голосов
/ 09 ноября 2010

ПРИМЕЧАНИЕ. Этот ответ больше не действителен, он хранится только по историческим причинам, правильный ответ прямо сейчас - использовать setuptools, больше информации https://mail.python.org/pipermail/distutils-sig/2013-March/020126.html


Прежде всего, я рекомендую сбросить setuptools:

alt text

И используйте либо distutils (который является стандартным механизмом для распространения пакетов Python ), либо распространяйте у вас также есть distutils2 , но я думаю, что еще не готов, и для нового стандарта здесь является руководством к тому, как написать setup.py.

Для вашей проблемы find_packages() не существует в distutils , и вам придется добавить свой пакет следующим образом:

setup(name='package',
      version='0.0dev1',
      description='blalal',
      author='me',
      packages=['package', 'package.sub_package', 'package.sub_package2'])

И если у вас много пакетов и подпакетов, вам придется создать некоторый код, который создает список пакетов здесь - пример из источника Django.

Я думаю, что использование distutils может помочь вам с вашей проблемой , и я надеюсь, что это может помочь:)

...