Моя проблема в том, что когда я загружаю свой пакет Python в PyPI, а затем устанавливаю его оттуда с помощью pip, мое приложение разрывается, потому что оно устанавливает мои файлы в совершенно разные места, чем когда я просто устанавливаю точно такой же пакет из локального sdist .
Установка из локального sdist помещает файлы в мою систему следующим образом:
/Python27/
Lib/
site-packages/
gloopy-0.1.alpha-py2.7.egg/ (egg and install info files)
data/ (images and shader source)
doc/ (html)
examples/ (.py scripts that use the library)
gloopy/ (source)
Это очень много, как я и ожидал, и работает нормально (например, мой источник может найти мою папку данных, потому что они лежат рядом друг с другом, так же, как и в процессе разработки.)
Если я загружаю тот же sdist в PyPI и затем устанавливаю его оттуда, используя pip, то все выглядит совсем иначе:
/Python27/
data/ (images and shader source)
doc/ (html)
Lib/
site-packages/
gloopy-0.1.alpha-py2.7.egg/ (egg and install info files)
gloopy/ (source files)
examples/ (.py scripts that use the library)
Это не работает вообще - мое приложение не может найти свои файлы данных, плюс, очевидно, это беспорядок, загрязняющий каталог верхнего уровня / python27 всем моим мусором.
Что я делаю не так? Как заставить установку pip вести себя как локальная установка sdist? Это даже то, чего я должен пытаться достичь?
Подробнее
У меня установлены setuptools, а также распространяются, и я вызываю Distribute_setup.use_setuptools ()
WindowsXP, Python2.7.
Моя директория разработки выглядит так:
/gloopy
/data (image files and GLSL shader souce read at runtime)
/doc (html files)
/examples (some scripts to show off the library)
/gloopy (the library itself)
В моем файле MANIFEST.in упоминаются все файлы, которые я хочу включить в sdist, включая все в данных, примерах и каталогах документов:
recursive-include data *.*
recursive-include examples *.py
recursive-include doc/html *.html *.css *.js *.png
include LICENSE.txt
include TODO.txt
Мой setup.py довольно многословен, но я думаю, что лучше всего включить его здесь, верно? Я также включаю дубликаты ссылок на те же каталоги data / doc / examples, которые упомянуты в MANIFEST.in, потому что я понимаю, что это необходимо для того, чтобы эти файлы были скопированы из sdist в систему во время установки.
NAME = 'gloopy'
VERSION= __import__(NAME).VERSION
RELEASE = __import__(NAME).RELEASE
SCRIPT = None
CONSOLE = False
def main():
import sys
from pprint import pprint
from setup_utils import distribute_setup
from setup_utils.sdist_setup import get_sdist_config
distribute_setup.use_setuptools()
from setuptools import setup
description, long_description = read_description()
config = dict(
name=name,
version=version,
description=description,
long_description=long_description,
keywords='',
packages=find_packages(),
data_files=[
('examples', glob('examples/*.py')),
('data/shaders', glob('data/shaders/*.*')),
('doc', glob('doc/html/*.*')),
('doc/_images', glob('doc/html/_images/*.*')),
('doc/_modules', glob('doc/html/_modules/*.*')),
('doc/_modules/gloopy', glob('doc/html/_modules/gloopy/*.*')),
('doc/_modules/gloopy/geom', glob('doc/html/_modules/gloopy/geom/*.*')),
('doc/_modules/gloopy/move', glob('doc/html/_modules/gloopy/move/*.*')),
('doc/_modules/gloopy/shapes', glob('doc/html/_modules/gloopy/shapes/*.*')),
('doc/_modules/gloopy/util', glob('doc/html/_modules/gloopy/util/*.*')),
('doc/_modules/gloopy/view', glob('doc/html/_modules/gloopy/view/*.*')),
('doc/_static', glob('doc/html/_static/*.*')),
('doc/_api', glob('doc/html/_api/*.*')),
],
classifiers=[
'Development Status :: 1 - Planning',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python :: 2.7',
],
# see classifiers http://pypi.python.org/pypi?:action=list_classifiers
)
config.update(dict(
author='Jonathan Hartley',
author_email='tartley@tartley.com',
url='http://bitbucket.org/tartley/gloopy',
license='New BSD',
) )
if '--verbose' in sys.argv:
pprint(config)
setup(**config)
if __name__ == '__main__':
main()