我收到一条我无法解决的错误消息。我不知道多处理库有什么问题,我不明白为什么它说导入build_database模块是不可能的,但同时它完全执行该模块的功能。
有人能告诉我他是否看到了什么。谢谢。
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\lib\multiprocessing\forking.py", line 380, in main
Traceback (most recent call last):
File "<string>", line 1, in <module>
prepare(preparation_data)
File "C:\Python27\lib\multiprocessing\forking.py", line 380, in main
File "C:\Python27\lib\multiprocessing\forking.py", line 495, in prepare
prepare(preparation_data)
'__parents_main__', file, path_name, etc
File "C:\Python27\lib\multiprocessing\forking.py", line 495, in prepare
File "C:\Users\Comp3\Desktop\User\Data\main.py", line 4, in <module>
'__parents_main__', file, path_name, etc
import database.build_database
File "C:\Users\Comp3\Desktop\User\Data\main.py", line 4, in <module>
ImportError : import database.build_database
NImportErroro module named build_database:
No module named build_database
这就是我在load_bigquery.py文件中的内容:
# Send CSV to Cloud Storage
def load_send_csv(table):
job = multiprocessing.current_process().name
print '[' + table + '] : job starting (' + job + ')'
bigquery.send_csv(table)
@timer.print_timing
def send_csv(tables):
jobs = []
build_csv(tables)
for t in tables:
if t not in csv_targets:
continue
print ">>>> Starting " + t
# Load CSV in BigQuery, as parallel jobs
j = multiprocessing.Process(target=load_send_csv, args=(t,))
jobs.append(j)
j.start()
# Wait for jobs to complete
for j in jobs:
j.join()
我从main.py中这样称呼它:
bigquery.load_bigquery.send_csv(tables)
我的文件夹是这样的:
src
| main.py
|
├───bigquery
│ │ bigquery.py
│ │ bigquery2.dat
│ │ client_secrets.json
│ │ herokudb.py
│ │ herokudb.pyc
│ │ distimo.py
│ │ flurry.py
│ │ load_bigquery.py
│ │ load_bigquery.pyc
│ │ timer.py
│ │ __init__.py
│ │ __init__.pyc
│ │
│ │
├───database
│ │ build_database.py
│ │ build_database.pyc
│ │ build_database2.py
│ │ postgresql.py
│ │ timer.py
│ │ __init__.py
│ │ __init__.pyc
如果我单独执行load_bigquery.py,那么该函数可以正常工作,但是如果我将它导入main.py则会因上面给出的错误而失败。
更新:
这是我的导入,也许它可能会有所帮助:
main.py
import database.build_database
import bigquery.load_bigquery
import views.build_analytics
import argparse
import getopt
import sys
import os
load_bigquery.py
import sys
import os
import subprocess
import time
import timer
import distimo
import flurry
import herokudb
import bigquery
import multiprocessing
import httplib2
bigquery.py
import sys
import os
import subprocess
import json
import time
import timer
import httplib2
from pprint import pprint
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run
from apiclient.errors import HttpError
也许问题在于load_bigquery.py导入多处理,然后main.py导入load_bigquery.py?
答案 0 :(得分:1)
您可能错过__init__.py
内的src/bigquery/
。所以你的源文件夹应该是:
> src/main.py
> src/bigquery/__init__.py
> src/bigquery/load_bigquery.py
> src/bigquery/bigquery.py
__init__.py
只需要为空,只有那里才能让Python知道bigquery是Python package。
更新:显然__init__.py
文件存在。实际的错误消息说明了一个不同的错误,即无法导入database.build_database
。
我的建议是调查一下。它没有被提到是在src文件夹中......
更新2:我认为你的进口存在冲突。 Python 2有一个稍微模糊的相对导入,有时会将人们赶出去。您同时拥有一个名为main.py
database
的{{1}}和bigquery
database
内的bigquery
。我想你最终会得到build_database
内的那个,{{1}}没有{{1}}。尝试重命名其中一个。