質問: OSはubuntu17.10です。 にあるとおり通りにVirtualenvにtensorflowをインストールし、ターミナルで動かすことに成功しています。具体的には、`import tensorflow as tf` が成功した上で、`tf.constant` を使った簡単な `sess.run` ができています。 ![ターミナルでtensorflowを動かしたときの画像](https://i.stack.imgur.com/hFVQY.png) しかし、jupyter notebookでは import が成功するものの、`tf.constant` を使った時点で `AttributeError: module 'tensorflow' has no attribute 'constant'` というエラーが出てしまいます。 ![jupyterで動かしたときの画像](https://i.stack.imgur.com/ITd4z.png) jupyter notebookはpipでインストールしており、その接続がうまくいってないようですがどうすればいいのかがわかりません。 Virtualenv下でjupyter notebookを起動すると ``` import tensorflow ``` ですらエラーがでるようになります。 Virtualenv の元で `pip install jupyter` すると `launchpadlib 1.10.5 requires testresources, which is not installed.` などのメッセージが出ます。 ![Virtualenvでjupyterをインストールしたときの画像](https://i.stack.imgur.com/EmMBN.png)
回答: **質問の前半について** Pythonではモジュールをインポートするとき、ビルトインモジュール、sys.path にあるディレクトリのリストの順で名前を探します。 単に`import`するだけでは、別の環境にあるパッケージを呼び出すことはないのでエラーになります。どうしても呼び出したい場合には、以下のように`tensorflow`パッケージがあるディレクトリを sys.path に追加することで、`tensorflow`をインポートできるようになります。 ``` import sys sys.path.append('pathto/site-packages') ``` 下の文章が気になりますが、`tensorflow.py`というファイルや`tensorflow`というディレクトリをカレントディレクトリ等検索がされるディレクトリに作成してないでしょうか。もし、作成していれば`import tensorflow`でインポートされているのはそのファイルやディレクトリになり、本来の`tensorflow`のパッケージが読み込まれないことになります。 > > jupyter notebookでは import が成功するものの > > > インポートされたモジュールのpathは、以下のコマンドで表示できるので、確認した方がいいでしょう。 ``` print(tensorflow.__path__) ``` **質問の後半について** 質問にあるマニュアルどうりにインストールすると以下のようにインストール済みモジュールを使用するという設定になっています。 ``` virtualenv --system-site-packages -p python3 ``` ところが Ubuntu 18.04 では、そうすると質問に記載されたのと同じような問題が発生します。GitHubのpipの方にも問題が上がっています。Ubuntu17.10 でも同じ問題が発生していると思われます。 取り敢えずこのエラーを無くすためには、仮想環境を作るときにインストール済みモジュールを使わない設定にすればいいです。 ``` virtualenv -p python3 ```