自分のカスタムNYTモジュールをインポートできないようです。次のように私のプロジェクト構造があると私は、Mac上でだ:カスタムモジュールのインポートに関する問題
articulation/
articulation/
__init__.py # empty
lib/
nyt.py
__init__.py # empty
tests/
test_nyt.py
__init__.py # empty
私はその最初の親ディレクトリからpython articulation/tests/test_nyt.py
を実行しようとすると、私は
File "articulation/tests/test_nyt.py", line 5, in <module>
from articulation.lib.nyt import NYT
ImportError: No module named articulation.lib.nyt
を取得し、私も
(venv) Ericas-MacBook-Pro:articulation edohring$ Python -m articulation/tests/test_nyt.py
/Users/edohring/Desktop/articulation/venv/bin/Python: Import by filename is not supported.
を試してみました
test_nyt.py
import sys
sys.path.insert(0, '../../')
import unittest
#from mock import patch
# TODO: store example as fixture and complete test
from articulation.lib.nyt import NYT
class TestNYT(unittest.TestCase):
@patch('articulation.lib.nyt.NYT.fetch')
def test_nyt(self):
print "hi"
#assert issubclass(NYT, Article)
# self.assertTrue(sour_surprise.title == '')"""
nyt.py
from __future__ import division
import regex as re
import string
import urllib2
from collections import Counter
from bs4 import BeautifulSoup
from cookielib import CookieJar
PARSER_TYPE = 'html.parser'
class NYT:
def __init__(self, title, url):
self.url = url
self.title = title
self.words = get_words(url)
def get_words(url):
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
p = opener.open(url)
soup = BeautifulSoup(p.read(), PARSER_TYPE)
# title = soup.html.head.title.string
letters = soup.find_all('p', class_='story-body-text story-content')
if len(letters)==0:
letters = soup.find_all('p', class_='paragraph--story')
if len(letters)==0:
letters = soup.find_all('p', class_='story-body-text',)
words = Counter()
for element in letters:
a = element.get_text().split()
for c in a:
c = ''.join(ch for ch in c if c.isalpha())
c = c.lower()
if len(c) > 0:
words[c] += 1
return words
def test_nyt():
china_apple_stores = NYT('title_test', 'http://www.nytimes.com/2016/12/29/technology/iphone-china-apple-stores.html?_r=0')
assert(len(china_apple_stores.words) > 0)
# print china_apple_stores.words
fri_brief = NYT('Russia, Syria, 2017: Your Friday Briefing', 'http://www.nytimes.com/2016/12/30/briefing/us-briefing-russia-syria-2017.html')
assert(fri_brief.title == 'Russia, Syria, 2017: Your Friday Briefing')
assert(fri_brief.url == 'http://www.nytimes.com/2016/12/30/briefing/us-briefing-russia-syria-2017.html')
assert(len(fri_brief.words) > 0)
vet = NYT('title_test', 'http://lens.blogs.nytimes.com/2017/01/03/a-love-story-and-twins-for-a-combat-veteran-amputee/')
assert(len(vet.words)>0)
print "All NYT Tests Passed"
#test_nyt()
私は以下を試してみましたが、うまくいかないようです - これを修正する方法を誰かが知っていますか? - >助けてくれない
- Entering Memory Python 2を使用しているため、Pythonはこれを見つけることができませんでした。これが問題であれば、私が何を試みたかを投稿できます。 - これを行う
相対インポートでは、(最初の学習曲線では)次のようになります。 'from ..lib.nyt import NYT' –
フォワードスラッシュで判断すると、Windows以外のシステム上にあることになります。あなたの現在のディレクトリは、Pythonのパスにないかもしれません。コマンドラインから 'python -c 'import articulation''を実行し、エラーが発生したかどうか確認してください。 –
相対インポートを試行してもうまくいきませんでした:(venv)edohring-mbp1:アーティキュレーションedohring $ Pythonアーティキュレーション/ tests/test_nyt.py トレースバック(最新のコール最後): ファイル "articulation/tests/test_nyt.py"非パッケージ (venv)edohring-mbp1で相対インポートをしようとしました:: ..lib.nytインポートNYT とValueErrorから で5行目、関節edohringの$ PWD /ユーザ/ edohring /デスクトップ/関節 –