2016-09-03 13 views
1

私はいくつかのプロジェクト間で共有するためにアプリケーションをパッケージ化したいと思います。 私のsetup.pyは次のようになります。distutilsで配布された私自身のモジュールをインポートできません

# -*- coding: utf-8 -*- 
from distutils.core import setup 

setup(
    name='foo_bar', 
    version='1.0', 
    py_modules=['foo_bar'], 
    install_requires=[ 
     'bitstring==3.1.5', 
     'pytz==2016.4', 
     'wheel==0.24.0', ] 
) 

その後、私は私が私のfoo_barはアプリケーションを使用してトラブルを抱えている私

用tar.gzファイルを作成するコマンド

python setup.py sdist 

を実行します。私はピップを経由して別のvirtualenvの中にそれをインストールしてい

pip install dist/foo_bar.tar.gz 

と私はPythonのコンソールで、このモジュールをインポートしようとすると、PIP凍結の出力は、それが

foo-bar==1.0 
bitstring==3.1.5 
pytz==2016.4 
wheel==0.24.0 

にインストールされていることを示唆している

import foo_bar 

私は得るImportError: No module named 'foo_bar'

私は行方不明ですか?

編集:

foo_bar 
├── dist 
│   └── foo_bar-1.0.tar.gz 
├── __init__.py 
├── MANIFEST 
├── bar.py 
├── requirements.txt 
├── setup.py 
+0

'' python setup.py install''を試しましたか?ディレクトリ構造を教えてください。あなたはモジュールをインポートしようとしているときに同じvirtualenvにいますか?なぜあなたは '' packages''ではなく '' py_modules''を使っていますか?それははるかに柔軟です... – ziky

+0

@ziky私はディレクトリ構造を含めるために自分の投稿を更新しました。別のvirtualenvを使用していますが、そこにfoo_barがインストールされています。 TBH、私は 'パッケージ'オプションを聞いていない、py_moduleの代わりにそれを使用することができます違いを作る? – mateuszb

+1

あなたは '' foo_bar''をインポートしようとしていますが、あなたのパッケージには '' foo_bar.py''はありません!その名前に '' bar.py''の名前を変更してみてください。しかし、私はこの方法でパッケージを使用したことはありません。通常は、 '' setup.py''と同じレベルにパッケージ( '' __init __。py''ファイルでディレクトリ)を作成します。つまり、プロジェクト内に別の '' foo_bar''ディレクトリを作成すると、 '' bar.py''を配置します。そして '' import foo_bar.bar''のようにインポートします。 – ziky

答えて

1

あなたのディレクトリ構造を提供することができます:

マイファイル構造は次のようになりますか?あなたはモジュールをインポートしようとしているときに同じvirtualenvにいますか?なぜpy_modulesを使用していて、packagesを使用していないのですか?

さらに、foo_barをインポートしようとしていますが、パッケージにはfoo_bar.pyはありません。名前をbar.pyに変更してください。

注:私はこの方法でパッケージを使用したことはありません。通常は、setup.pyと同じレベルのパッケージ(__init__.pyファイルのディレクトリ)を作成します。つまり、別のfoo_barディレクトリをプロジェクトに作成すると、そこにbar.pyが配置されます。次に、import foo_bar.barのようにインポートします。

関連する問題