2010-05-23 26 views
1

Nous sommes donc en train d'écrire un cadre de recherche en texte intégral MongoDb. MongoDB est à peu près javascript-native, donc nous avons d'abord écrit la librairie javascript, et cela fonctionne.Disposition des fichiers et configuration de setuptools pour le bit python d'une bibliothèque multilingue

Maintenant j'essaye d'écrire une structure python, qui sera partiellement en python, mais j'utiliserai partiellement ces mêmes fonctions javascript stockées - les fonctions javascript sont une partie intrinsèque de la bibliothèque. D'un autre côté, le framework javascript ne dépend pas de python. comme ils sont assez entrelacés, il semble que cela vaille la peine de les garder dans le même dépôt. J'essaie de structurer l'ensemble du projet pour donner un statut égal aux frameworks javascript et python (peut-être un driver ruby ​​ou quoi que ce soit dans le futur?), Tout en permettant à la librairie python de bien s'installer.

il semble actuellement comme ceci: (simplifié un peu)

javascript/jstest/test1.js 
javascript/mongo-fulltext/search.js 
javascript/mongo-fulltext/util.js 
python/docs/indext.rst 
python/tests/search_test.py 
python/tests/__init__.py 
python/mongofulltextsearch/__init__.py 
python/mongofulltextsearch/mongo_search.py 
python/mongofulltextsearch/util.py 
python/setup.py 

J'ai sauté sur quelques fichiers pour simplifier, mais vous avez l'idée générale; c'est un projet python à peu près standard ... sauf que cela dépend essentiellement d'un tas de javascript qui est stocké dans une arborescence de répertoire.

Quelle est la configuration préférée pour faire face à ce genre de chose quand il s'agit de setuptools? Je peux travailler comment utiliser package_data etc pour installer les fichiers de données qui vivent dans mon projet python as per the setuptools docs. Le problème est si je veux utiliser setuptools pour installer des choses, y compris les fichiers javascript en dehors de l'arbre de code python, puis y accéder de manière cohérente quand je développe le code python et quand il est easy_install ed sur le site de quelqu'un.

Est-ce que supportait le comportement de setuptools? Dois-je utiliser paver ou distutils2 ou distribuer ou quelque chose? (distutils de base n'est pas une option, la raison pour laquelle je fais cela est de permettre le suivi des exigences) Comment devrais-je lire le contenu de ces fichiers dans les scripts python?

Répondre

2

La réponse courte est qu'aucun des outils de distribution Python ne va faire ce que vous voulez, exactement comme vous le voulez. Même si vous utilisez la fonction data_files de distutils, vous devrez toujours copier vos fichiers javascript dans votre répertoire de projet Python (c'est-à-dire quelque part dans le même répertoire que votre fichier setup.py). Il se peut aussi que vous copiiez les fichiers .js dans votre paquetage (c.-à-d. à côté de mongofulltextsearch/init .py) dans le cadre de votre processus de construction, et utilisez package_data ou include_package_data = True.

(Ou bien, vous pouvez éventuellement utiliser des liens symboliques, externes ou autres, si votre système de contrôle de révision les supporte.Je crois que lors de la construction des distributions sources, les outils de distribution Python convertissent les liens symboliques en fichiers réels. pourrait donner un essai.)

+0

OK, cela vaut la peine de le savoir. Pour l'enregistrement public, j'ai piraté quelque chose ensemble en utilisant des liens symboliques sur la base de ceci, et cela fonctionne en effet (c'est-à-dire qu'ils sont convertis en vrais fichiers par la méthode de setuptools). Ce n'est pas vraiment une base pour une ATM multilingue robuste et n'est pas multi-plateforme non plus (désolé, Windows!), Donc je pense que je vais abandonner le support multiplate-forme et aller chercher votre autre suggestion d'un script de build plus intelligent (ou éventuellement, puisque c'est un projet git, un git-external) et un référentiel pour chaque langue. Merci! –

+0

"fossé", c'est-à-dire, pas de "support multi plate-forme", mais plusieurs * langues * support dans un seul référentiel. Désolé, tard dans la nuit, en pensant là. Pendant que je poste des mises à jour, si vous êtes le P. Eby que je pense que vous êtes - merci pour les deux conseils, et le travail sur setuptools lui-même! –